一趟快速排序的算法是:java
1)設置兩個變量i、j,排序開始的時候:i=0,j=N-1;算法
2)以第一個數組元素做爲關鍵數據,賦值給key,即key=A[0];數組
3)從j開始向前搜索,即由後開始向前搜索(j--),找到第一個小於key的值A[j],將A[j]和A[i]互換;ide
4)從i開始向後搜索,即由前開始向後搜索(i++),找到第一個大於key的A[i],將A[i]和A[j]互換;ui
5)重複第三、4步,直到i=j; (3,4步中,沒找到符合條件的值,即3中A[j]不小於key,4中A[i]不大於key的時候改變j、i的值,使得j=j-1,i=i+1,直至找到爲止。找到符合條件的值,進行交換的時候i, j指針位置不變。另外,i==j這一過程必定正好是i+或j-完成的時候,此時令循環結束)。spa
(1)基本思想:選擇一個基準元素,一般選擇第一個元素或者最後一個元素,經過一趟掃描,將待排序列分紅兩部分,一部分比基準元素小,一部分大於等於基準元素,此時基準元素在其排好序後的正確位置,而後再用一樣的方法遞歸地排序劃分的兩部分。指針
(2)實現代碼以下:htm
public class quicksort{ /* * 快速排序 */ int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51}; public quicksort(){ quick(a); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } } public int getMiddle(int[] list, int low, int high) { int tmp = list[low]; //數組的第一個做爲中軸 while (low < high) { while (low < high && list[high] >= tmp) { high--; } list[low] = list[high]; //比中軸小的記錄移到低端 while (low < high && list[low] <= tmp) { low++; } list[high] = list[low]; //比中軸大的記錄移到高端 } list[low] = tmp; //中軸記錄到尾 return low; //返回中軸的位置 } public void _quickSort(int[] list, int low, int high) { if (low < high) { int middle = getMiddle(list, low, high); //將list數組進行一分爲二 _quickSort(list, low, middle - 1); //對低字表進行遞歸排序 _quickSort(list, middle + 1, high); //對高字表進行遞歸排序 } } public void quick(int[] a2) { if (a2.length>0) { //查看數組是否爲空 _quickSort(a2,0,a2.length-1); } } public static void main(String[] args) { quicksort qs=new quicksort(); qs._quickSort(qs.a,0,qs.a.length-1); } }