快速排序的最早劃分方法 Hoare劃分

2021-08-06 03:05:52 字數 796 閱讀 1190

快速排序的劃分過程最早由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...