QuickSort及其變種演算法的總結

2021-07-07 02:45:15 字數 1362 閱讀 7467

描述:

圖示:

當a[j] < a[r]時候,a[j]應該被放入黑色框中,於是將a[i]與a[j]交換。當p==r時,a[i+1]就要與a[r]交換,即a[r]位於小子陣列和大子陣列之間。

演算法描述:

partirion(a,p,r)   //a為陣列,p為需要劃分的起始元素,r為需要劃分的終止元素

x = a[r] //pivot

i = p-1

for j = p to r-1

ifa[j] <= x

i = i+1

swap(a[i],a[j])

swap(a[i+1],a[r])

return i+1 //返回主元的位置,並以主元為分界,對其兩邊的子陣列進行遞迴呼叫。

快速排序思想(edit on 12th nov,2015):

上述圖中的i j 兩個指標,實則是分別指向陣列的兩個部分。在某乙個時刻,我們需要排序的陣列應該是這個樣子的。

i 指標將會一直指向第乙個部分的最後乙個元素,我們稱之為s1[last]。而j 指標將會一直指向第三部分的第乙個元素,我們稱之為s3[first]。

為什麼這麼設定?

變種演算法

尋找最小的k個數:有n個整數(陣列s),請找出其中最小的k個數。

演算法:現有n個紅白藍 三種不同顏色的小球,亂序排在一起,請通過兩兩交換任意兩球,使得從左至右的球依次是紅,白,藍。

圖示如下(edit on 16th nov 2015)

有沒有覺得這種模式很熟悉,這就是我們傳說中的快排的思想。於是我們有了如下這個圖。表示某個時刻這些球的分布狀態。

我們將其分為四個部分s1,s2,s3,s4,分別代表著紅球的集合,白球的集合,還未分類的球的集合,和藍球的集合。指標begin指向s2[0],current指向s3[0],end指向s4[0]。接下來就是如何做操作的問題了。

二分查詢演算法及其變種

前言 二分查詢演算法也稱為折半查詢演算法,是一種在查詢演算法中普遍使用的演算法。其演算法的基本思想是 在有序表中,取中間的記錄作為比較關鍵字,若給定值與中間記錄的關鍵字相等,則查詢成功 若給定的值小於中間記錄的關鍵字,則在中間記錄的左半區間繼續查詢 若給定值大於中間記錄的關鍵字,則在中間記錄的右半區...

二分查詢演算法及其變種

前言 二分查詢演算法也稱為折半查詢演算法,是一種在查詢演算法中普遍使用的演算法。其演算法的基本思想是 在有序表中,取中間的記錄作為比較關鍵字,若給定值與中間記錄的關鍵字相等,則查詢成功 若給定的值小於中間記錄的關鍵字,則在中間記錄的左半區間繼續查詢 若給定值大於中間記錄的關鍵字,則在中間記錄的右半區...

演算法 二分查詢及其變種

二分查詢的前提條件是序列是有序的!時間複雜度log n 需要注意的幾個地方 public intfindtarget int nums else return 1 沒找到 返回 1 需要注意的地方 public intfindtargetleft int nums else return l 同樣如...