快速排序,是一種速度快,效率高的排序演算法。
思路:在要排的陣列(比如陣列a)中選擇乙個中心值(如a[0]),通過一趟排序將陣列a劃分成兩部分,其中以key(一般是陣列的中心位置資料)為中心,假設要排的陣列按照從小到大排序,key右邊都比key大,key左邊都比key小,然後對這兩部分分別重複這個過程,直到整個有序。
整個快排的過程就簡化為了一趟排序的過程,然後呼叫遞迴就行了。
一趟排序的方法:
定義i=0,j=a.length-1,i為第乙個數的下標,j為最後乙個數下標
從陣列的最後乙個數aj從右往左找,找到第乙個小於key的數,計為ai
從陣列的第乙個數aj從左往右找,找到第乙個大於key的數,計為aj
交換aj和ai
重複這一過程,直到 i = j
調整key的位置,把a[i]和key交換
選擇 key=5 , 開始時 i=0, j=7
index 0 1 2 3 4 5 6 7
開始: 5 2 8 9 2 3 4 9
第一次查詢:5 2 8 9 2 3 4 9
i j
交換: 5 2 4 9 2 3 8 9
i j
第二次查詢:5 2 4 9 23 89
i j
交換: 5 2 4 3 29 89
i j
第三次查詢:5 2 4 32
9 8 9ij
調整key: 2 2 4 35
9 8 9ij
**實現:
public class quicksort;
system.out.println(arrays.tostring(a));
quicksort(a);
system.out.println(arrays.tostring(a));
}public static void quicksort(int a)
}private static void quicksort(int a,int low,int high)
//2,存
int i=low;
int j=high;
//3,key
int key=a[low];
//4,完成一趟排序
while(i < j)
//從左往右找到第乙個大於key的數
while(i//執行完上面兩個迴圈,第乙個找到小於key的數a[j];第二個迴圈找到大於key的數a[i];交換兩個數的位置
if(i}
//調整key的位置
int tem=a[i];
a[i]=a[low];
a[low]=tem;
//對key的左邊的數快排
quicksort(a,low,i-1);
//對key的右邊的數快排
quicksort(a,i+1,high);
}}
演算法 排序演算法之快速排序
很受打擊啊啊啊啊啊!這道排序題我很久之前就做過,而且當時沒用20分鐘就搞定了,可是,今天在公司做完手上的活之後打算刷題時,又心血來潮的想重做一遍,心想反正也花不了多少時間,結果。血崩了。要求 對於乙個int陣列,請編寫乙個快速排序演算法,對陣列元素排序。給定乙個int陣列a及陣列的大小n,請返回排序...
演算法 排序演算法之快速排序
快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要 nlogn 次比較。在最壞狀況下則需要 n2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 nlogn 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效率地被實現出來。快速排序...
排序演算法之快速排序
快速排序使用分治法 divide and conquer 策略來把乙個序列 list 分為兩個子串行 sub lists 步驟為 從數列中挑出乙個元素,稱為 基準 pivot 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分割槽退出...