快速排序-java实现
2015-05-07 16:29
302 查看
快速排序(Quicksort)是对冒泡排序的一种改进。
基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
使用while循环的举例
平均复杂度是:nlog(n)
最坏的情况是: n^2
最好的情况是: nlog(n)
基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
//快速排序算法 public class QuitSort { public static void main(String[] srgs){ int arr[] = {12,2,16,30,28,10,16,20,6,18}; show(arr); quit_sort(arr, 0, arr.length - 1); show(arr); } //输出数组 private static void show(int[] arr){ int len = arr.length; int i; for(i = 0; i < len - 1; i++){ System.out.print(arr[i] + " "); } System.out.println(arr[len - 1]); } //排序算法 private static void quit_sort(int[] arr, int begin, int end){ int pivot = arr[begin]; //选取的参考对象 int low = begin; //起始指针 int height = end; //末尾指针 boolean direction = true; //比较方向的位置 if(height - low <= 1){ return; //不用排序 } L1: while(low < height){ if(direction){ //从右到左 for(int i = height; i > low; i--){ if(arr[i] < pivot){ arr[low++] = arr[i]; height = i; direction = !direction; continue L1; } } height = low; }else{ //从左到右 for(int i = low; i < height; i++){ if(arr[i] > pivot){ arr[height--] = arr[i]; low = i; direction = !direction; continue L1; } } low = height; } } arr[low] = pivot; //最后将比较对象赋值 quit_sort(arr, begin, low - 1); //左半部分排序 quit_sort(arr, low + 1, end); //有半部分排序 } }
使用while循环的举例
public static void quit_sort(int a[], int low, int high) { if(low >= high) { return; } int first = low; int last = high; int key = a[first];/*用字表的第一个记录作为枢轴*/ while(first < last) { //找右半部分小于key的值 while(first < last && a[last] >= key) { --last; } a[first] = a[last];/*将比第一个小的移到低端*/ //找左半部分大于key的值 while(first < last && a[first] <= key) { ++first; } a[last] = a[first]; /*将比第一个大的移到高端*/ } /*将枢轴存到起始位置【因为key的值是起始元素】 否则,起始位置数据会丢失 注 起始位置不是数组的第一个元素,是while循环后的位置 */ a[first] = key; quit_sort(a, low, first-1); quit_sort(a, first+1, high); }
平均复杂度是:nlog(n)
最坏的情况是: n^2
最好的情况是: nlog(n)
相关文章推荐
- 快速排序方法Java实现与分析
- java实现的冒泡、选择、快速排序
- JAVA排序算法实现代码-快速(Quick Sort)排序
- 排序算法复习(Java实现)(二): 插入,冒泡,选择,Shell,快速排序
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- 快速排序的JAVA实现
- 排序算法复习(Java实现):插入,冒泡,选择,Shell,快速排序, 归并排序,堆排序,桶式排序,基数排序
- 快速排序Java实现
- Java下实现快速排序
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- 【转】排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- java实现快速排序
- java实现快速排序
- Java分别实现冒泡排序、插入排序、快速排序、选择排序、交换排序
- 快速排序Java实现和Javascript实现
- java(Merge) 实现归并排序,快速排序
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,快速排序
- 快速排序Java实现
- 4、 排序有哪几种方法?请列举。并用JAVA实现一个快速排序.
- Java实现快速排序