原偽**:
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函式的本質和...