對於快速排序的總結(摘自演算法入門)

2021-07-26 15:38:10 字數 1708 閱讀 5595

程式quicksort(a,p,r)

輸入a:乙個陣列 p,r:a的某個子陣列的開始索引和末尾索引

結果子陣列a[p,r]中的元素按照非遞減順序排序

步驟:1.如果p>=r,那麼無需執行任何操作即可返回

2.否則,執行如下操作:

a.呼叫partition(a,p,r),令q被賦值為partition(a,p,r)的返回值

b.遞迴呼叫quicksort(a,p,q-1)

c.遞迴呼叫quicksort(a,q+1,r)

快速排序的關鍵是劃分陣列。

以排書本順序為例,選擇集合中最右側的書籍(在位置r上的書籍)作為主元。

任意時刻,每本書被精確地劃分到下面四個組中的乙個組中,且這些組均位於位置p到位置r之間,從左到右依次是:

a.組l(左側組):這些書籍的作者名字按照字母排序出現在主元之前或者跟主元的作者名字一致。

b.組r(右側組):排在組l之後,這些書籍的作者名字按照字母順序出現在主元之後。

c.組u(未知組):排在組r之後,這些書籍還沒有檢查,因此不知道它們的作者名字與主元的作者名字相比,排序如何。

d.組p(主元):排在組u之後,僅僅一本書,即主元。

我們從左到右檢查組u中的書籍,將其與主元比較,並將它移動到組l或組r中,一旦檢查到主元位置處,即終止所有操作,因此,與主元比較的始終是組u中最左側的書籍。

接下來分類討論:

1.如果這個書籍的作者名字按照字母排序位於主元的作者名字之後,那麼這本書就成為組r中最右側的書籍。由於這本書原來是組u中最左側的書籍,並且組u緊跟在組r之後,所以只需要將組r和組u之間的分割線向右移動乙個位置,而無需移動其餘任何書籍

2.如果這個書籍的作者名字按照字母排序位於主元的作者名字之前,或者等於主元的作者名字,那麼將這本書置為組l中最右側的書籍。將它與組r中最左側的書籍進行調換,並且將組l和組r之間的分割線向右移動乙個位置

一旦判定到主元位置,將它與組r中最左側的書籍進行調換。

為了將劃分書籍的操作轉換成劃分乙個子陣列a[p......r]的操作,首先我們選擇將a [r](最右側的書籍)作為主元。隨後自左向右檢查子陣列,將每個元素與主元進行比較

具體:1.子陣列a[p......q-1]:對應於組l:每個元素小於或等於主元

2.子陣列a[q......u-1]:對應於組r:每個元素均大於主元

3.子陣列a[u......r-1]:對應於組u:未知情況

4.元素a[r]對應於組p:該位置上放置著主元

在每一步中,將組u中最左側的元素a[u]和主元進行比較。

具體:1.如果a[u]比主元大,那麼將u自增一來將組r和組u之前的分割線向右移動乙個位置。

2.反之,如果a[u]小於等於主元,那麼將元素a[q](組r中的最左側元素)和a[u]進行調換,且分別將q和u自增一,相當於將組l和組r之間的分割線以及組r和組u之間的分割線分別向右移動乙個位置

由上可寫出partition函式:

程式partition(a,p,r)

輸入a:乙個陣列

p,r:a的某個子陣列的開始索引和末尾索引

結果重排a[p.......r]中的元素以便a[p......q-1]中的元素均小於等於a[q]的值,同時令a[q+1......r]中的元素均大於a[q]的值。將索引q返回給呼叫者。

步驟1.令q取p

2.令u從p到r-1依次取值:

如果a[u]<=a[r],那麼交換a[q]和a[u]的後置,再將q自增一

3.交換a[q]和a[r]的值,返回q。

排序演算法入門 快速排序

涵義 雖說快速排序是由氣泡排序改進而來,二者都是通過元素交換達到排序效果,但是在個人看來快速排序思想和冒泡完全不同。時間複雜度 直接插入排序最好的時間複雜度為o nlog2n 直接插入排序的最壞時間複雜度為o n2 因此直接插入排序總的平均時間複雜度為o nlog2n 注 不穩定 快速排序之所以比冒...

排序演算法總結(快速排序)

終於不用改 了,希望文章大修順利!穩定的演算法 不穩定的演算法 內部排序 排序過程不涉及內 外存交換 外部排序 排序過程有內 外存交換 in place sort 不占用額外記憶體或占用常數的記憶體 插入排序 選擇排序 氣泡排序 堆排序 快速排序。out place sort 歸併排序 計數排序 基...

排序演算法總結 快速排序

快速排序的一般步驟如下 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右區間重複第二步,直到各區間只有乙個數。來自於 啊哈!演算法 這裡需要解釋一下為什麼每次交換的時候都需要右邊的哨兵先走 最主要是相遇點的問題,演算法的...