快速排序的劃分過程最早由c.r.hoare設計,偽**如下:
hoare-partition(a,p,r)
x=a[p]
i=p-1
j=r+1
while true
repeat
j=j-1
until a[j]
<=x
repeat
i=i+1
until a[i]>=x
ifi< j
exchange a[i] with a[j]
else
return
j
易知,
1. 下標i和j不會訪問超出陣列以外的元素。
2. 當hoare-patition結束時,返回的j的值滿足p≤
j<
r 。
3. 當hoare-patition結束時,a[p..j]中每乙個元素都小於或等於a[j+1..r]中的元素。
演算法c語言實現如下:
int hoare_partition(int
*source, int head, int tail) while (source[j] > x);
do while (source[i] < x);
if (i < j) else
return j;
}}void hoare_quick_sort(int
*source, int head, int tail)
原題可見演算法導論第三版第七章思考題7-1,答案 快速排序的劃分方法 5種
快速排序的劃分方法 5種 自己做的筆記,來自看過的部落格和刷題的時候的發現。劃分的方法 對於元素進行比較,只有三種結果 所以我們可以假設是紅色 陣列劃分完之後應該是 藍 藍白 pivot 紅 紅白 1 單指標從左向右掃瞄跳過 藍白 最終劃分結果 藍白混合 pivot 紅 int partition ...
劃分 快速排序
很簡單。就不解釋了。就說說自己寫 時遇到的問題吧。無辜的總有乙個0值,插入到 左邊 12 10 3 198 120 8 54 7 12 10 3 0 0 8 54 7 只因為,陣列長度是10,但是只有8個資料,所以就有2個陣列元素為0 package high public class partin...
劃分演算法(快速排序的根基)
劃分演算法 author demon public class partition 初始化測試陣列 劃分演算法 pivot預設選擇陣列最右端 param partitionarr param left param right private static int partition int left...