排序演算法 快速排序超級總結

2021-06-06 13:23:57 字數 1542 閱讀 9107

快速排序

一、介紹

快速排序和合併排序有點類似,兩者可以相互比較。快速排序也是像合併排序那樣將整個序列分成兩段分別進行排序。但是快速排序沒有合併排序的合併過程。

該演算法是1960 年c.a.r.hoard提出的乙個非常好的排序演算法。快速排序演算法需要選擇乙個劃分元素,把小於劃分元素的元素放在它的左邊,大於它的元素放在右邊,這樣就分成了左右兩端,在對左右兩段進行排序。

從上面可以得出,劃分元素的選擇是乙個瓶頸。演算法的效率取決於劃分元素的選擇。

二、實現

這裡只給出快速排序的遞迴實現,該演算法由兩個函式組成,乙個是劃分函式,另外乙個是遞迴處理函式。

(1)劃分函式

/*劃分函式*/

//s和t是劃分段的起止下標,k是劃分元素最終位置

void partition(int a, int s,int t,int &k)

; int len=sizeof(a)/sizeof(int);

quick_sort(a,0,len-1);

printf("排序後為:\n");

for(int i=0;i

三、複雜性

快速排序的平均複雜度和合併排序是一樣的,都是o(n*log(n))

,但是最壞情況下為o(n2)

,這和氣泡排序是一樣的。很明顯,最壞的情況是輸入資料是已經排好序的,但是在實際情況下很少出現這樣的情況。

三、應用

(1)為什麼用快速排序

1.因為快速排序的遞迴實現很簡單

2.在一般情況下,快速排序的速度和合併排序一樣,都是o(n*log(n))

3.該方法不需要合併過程

(2)為什麼不用快速排序

1.因為在最壞情況下,該方法和氣泡排序一樣,很慢

2.迭代的實現很困難。

3.對於某些資料型別,有其他更快的排序方法。

總結:

輸入資料次序越亂,所選劃分元素值的隨機性越好,排序速度越快,反之,輸入資料越有序,排序速度越慢,可見快速排序不是一種自然的排序演算法。

即使採用前面介紹的選取中值的方法,也無法保證劃分產生的子2問題大小完全平衡。至多能改變演算法平均的時間效能,無法改變最壞情況的時間效能。在最壞情況下,快速排序的時間複雜度總是o(n2)

。 複製

搜尋 複製搜尋

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

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

排序演算法總結 快速排序

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

排序演算法總結 快速排序

前面說的氣泡排序是一種交換排序。交換排序還有一種演算法,就是快速排序演算法。快速排序的核心思想是分而治之。意思就是選出乙個基準 可以是第乙個元素,也可以是最後乙個。為了方便我們選取第乙個 將小於這個基準的全部元素都放在這個基準的左邊,大於這個基準的全部元素都放在基準的右邊。然後分別對左右兩個陣列在進...