快排partition過程 索引小修改

2021-07-04 10:20:17 字數 552 閱讀 1274

原偽**:

1partition(a,p,r)

2x=a[r]

3i=p-1

4for j=p:r-1

5if a[j]<=x

6i++

7exchange a[i].a[j]

8exchange a[i+1],a[r]

9return i+1

索引i指向<=主元x的前子陣列的最後乙個元素

包括《劍指offer》中也是這樣實現索引,

其實很不方便,一開始指向了陣列前(外部)的元素,第8、9行更是在演算法主體結束後繼續修改

「指向<=主元x的前子陣列的最後乙個元素」的下乙個元素

偽**:

1partition(a,p,r)

2x=a[r]

3i=p

4for j=p:r-1

5if a[j]<=x

6exchange a[i].a[j]

7i++

8exchange a[i],a[r]

9return i

另外,判斷i==j可以取消元素與自身的交換

快排的兩種partition函式

partition函式就是快排的關鍵部分,作用是將陣列劃分成兩部分,左邊小於基數,右邊大於基數 但實際上它也不僅僅用於快排,在求top k 問題中也常常會用到。下面介紹兩種partition函式,他們都是雙指標的方法,但具體會有差異 函式一 頭尾指標向中間夾 def partition array,...

快排擴充套件,Partition函式的應用 一

擴充套件分析 總結快排作為平均速度最快的一種內部排序,基礎思想是基於分治的。關於分治演算法設計思想總結,我在講解演算法設計思路這篇文章講到過。快速排序中乙個非常核心的地方就是partition函式的作用,這個函式支撐了快排的分的過程。我覺得這個函式重要,不單是因為其支撐了快排,而且在很多演算法設計的...

快排光芒下被忽視的Partition函式

看到這篇標題,沒有學過快排的人自然是不知道partition函式的意思和作用,這裡附上學習的連線 lantian的快排總結 我們現在都是被快排蒙蔽了雙眼,沒有意識到快最核心的劃分函式partition,當然partition函式也就不止於快排這裡,本文就從多方面來為展示partition函式的本質和...