高级排序算法--快速排序
2012-04-04 13:41
211 查看
算法思想
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
private static void sort(int[] list,int left,int right) { if(right-left<=0){ return; }else{ long pivot = list[right]; int partition = partitionIt(list,left,right,pivot); sort(list,left,partition-1); sort(list,partition+1,right); } } public static int partitionIt(int[] list,int left, int right, long pivot) { int leftPtr = left - 1; // right of first elem int rightPtr = right; // left of pivot while(true){ while(list[++leftPtr] < pivot) ; // (nop) while(rightPtr > 0 && // find smaller item list[--rightPtr] > pivot) ; // (nop) if(leftPtr >= rightPtr){ // if pointers cross, break; // partition done } else{ // not crossed, so swap(list,leftPtr,rightPtr); } } // end while(true) swap(list,leftPtr,right); return leftPtr; // return partition } public static void swap(int[] list,int i,int j){ int temp = list[i]; list[i] = list[j]; list[j] = temp; }
相关文章推荐
- javascript高级排序算法-希尔排序、归并排序、快速排序
- 高级排序算法--快速排序
- 排序算法总结(四)快速排序【QUICK SORT】
- 排序算法(插入排序、shell排序、冒泡排序、选择排序、合并排序、堆排序、快速排序、计数排序、基数排序、桶排序)
- 排序算法(五) —— 快速排序
- Java实现排序算法——快速排序
- 数据结构--排序算法--快速排序
- 排序算法之快速排序
- 排序算法之快速排序的思想以及Java实现
- 数据结构-排序算法详解(插入排序,希尔排序,堆排序,归并排序,快速排序,桶式排序)
- 排序算法(快速排序,冒泡排序,插入排序,堆排序)
- 排序算法笔记-快速排序 Quicksort
- 数据结构6-排序算法(直接插入排序、希尔排序、快速排序、归并排序和堆排序)
- 快速排序 Vs. 归并排序 Vs. 堆排序——谁才是最强的排序算法
- PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
- 排序算法----快速排序java
- 排序算法(交换排序)——快速排序
- java 排序算法实现 其四:快速排序
- 高级排序-快速排序,最右边的值为枢纽
- PHP四种基础排序算法--冒泡,直接插入,快速和选择排序