简单快速理解算法--快速排序
来源:互联网 发布:狼雨seo网络工作室 编辑:程序博客网 时间:2024/05/29 12:41
我自己实现的有点bug,就是数组元素不能拥有重复,不知道咋修改。
package cn.exercise.algorithmsTest;public class QuickSort2 { public static void qsort_asc(int source[], int low, int high) { int temp1[] = new int[source.length]; int temp2[] = new int[source.length]; int i, j, key; if (low < high) { i = low; j = high; key = source[i]; while (i < j && i != j) { while (i < j && source[j] > key) { j--; } if (i < j) { temp1[i] = source[i]; source[i] = source[j]; source[j] = temp1[i]; } while (i < j && source[i] < key) { i++; } if (i < j) { temp2[j] = source[j]; source[j] = source[i]; source[i] = temp2[j]; } } source[i] = key; qsort_asc(source, low, i - 1); qsort_asc(source, i + 1, high); } } public static void main(String[] args) { int b[] = { 49, 38, 65, 97, 76, 13, 27, 50 }; qsort_asc(b, 0, b.length - 1); for (int i = 0; i < b.length; i++) { System.out.printf("%d ", b[i]); } }}
- 设置两个变量i,j,排序开始的时候,i = 0;j = N-1
- 以第一组数组元素作为关键数据,赋值给key,即key = source[0]
- 从j开始向前搜索,即逆向遍历数组,找到第一个小于key的值sorce[j],将source[j]和source[i]互换
- 从i开始向前搜索,即正向遍历数组,找到第一个大于key的值sorce[i],将source[i]和source[j]互换
- 重复上两步,直到i=j。至此,完成了一趟遍历。
- 接着让key赋值给sorce[i],然后重复掉用查询方法对低位到i-1,和i+1到高位。之后便可以完成排序。
官方的快速排序如下
package cn.exercise.algorithmsTest;public class QuickSort { public static void qsort_asc(int source[], int low, int high) { int i, j, key; if (low < high) { i = low; j = high; key = source[i]; while (i < j) { while (i < j && source[j] > key) { j--; } if (i < j) { source[i] = source[j]; i++; } while (i < j && source[i] < key) { i++; } if (i < j) { source[j] = source[i]; j--; } } source[i] = key; qsort_asc(source, low, i - 1); qsort_asc(source, i + 1, high); } } public static void main(String[] args) { int[] a = { 5, 2, 6, 3, 8 }; int i; qsort_asc(a, 0, a.length-1); for (i = 0; i < a.length; i++) { System.out.printf("%d ",a[i]); } }}
阅读全文
0 0
- 简单理解 快速排序算法
- 简单快速理解算法--快速排序
- 简单理解java快速排序算法
- 快速排序算法理解
- 简单理解的快速排序
- 快速排序算法的理解
- 快速排序算法的理解
- 快速理解快速排序
- 简单排序算法之快速排序
- 简单的排序算法:快速排序
- java实现简单排序算法:快速排序
- C++简单排序算法之快速排序
- 排序算法-----快速排序简单介绍
- 如何简单地理解快速排序
- 快速简单理解——希尔排序
- 深入理解快速排序算法的稳定性
- 使用python理解快速排序算法
- 算法#11--用简单的思维理解归并排序和三向切分快速排序
- 进阶篇之纯css+字体实现五角星(半颗星)评分
- LeetCode--Next Permutation
- C/C++ | 30-25 在一个字符串中找到可能的最长的子字符串
- Linux 3.4.39内核编译配置选项介绍
- Nvidia Nsight Eclipse导入已有工程
- 简单快速理解算法--快速排序
- [BZOJ]3790 神奇项链 Manacher+树状数组
- API翻译:glBindFramebuffer
- 常用正则----基础校验
- hpuoj 【1346】打印图形【水题】
- 阿里云 域名访问tomcat项目
- .NET Framework、.NET Core、Mono、Xamarin之间关系
- C/C++ | 30-26 函数在给定的内存区域搜索给定的字符,返回索引值
- HDU 2002