資料結構與演算法 排序演算法之六 快速排序

2021-07-07 10:33:53 字數 1220 閱讀 3970

一  快速排序

排序演算法中的奧斯卡,諾貝爾獎,當屬快速排序!

快速排序是20世紀十大演算法之一!!!!!!!!

1  基本思想

前面提到氣泡排序,它是一種交換排序,堪稱最慢的排序演算法。可是,物極必反,快速排序是氣泡排序的公升級加強版,同屬於交換排序類。

以」空間「換時間,快速排序不是相鄰元素的交換,而是加大了比較和交換的距離,從而減少總的比較次數和移動交換次數。就拿考試分數來說,首先,60分幾個,我們以60分為標準,從一堆分數中高於60扔一堆,低於60仍另一堆,管你第一還是倒數,然後80分以上優秀,我們就在60分以上的那一堆中,以80分為標準,高於80甩一邊,低於80你可以走了,你不是優秀學生。這樣一來我們反覆進行這樣的劃界,分類,不斷縮小標準之間的差,這樣就得到了乙個按序排列的分數表了。

2.實現

真槍實彈來演練一下快速排序演算法,下面看具體的**實現:

首先是快速排序的主體:

void quick_sort(sortarray *a , int low , int high)

}

演算法中最重要的是partition部分,就是選取標準,然後分成兩堆。

int partition(sortarray *a , int low ,int high)

if (low < high) //比temp小則替換

//將比temp值大的數換到陣列的高階

while ( low < high && (*a)[low] <= temp)

if (low < high) //比temp大則替換

}//最後low==high則推出迴圈

//此處將temp值傳遞到中間被修改的值上

(*a)[low] = temp;

return low;

}

對於快速排序的優化主要是針對partition函式體的優化,如何選擇這個」標準「,有興趣的可以研究一下,說不定你的演算法就是下乙個」十大演算法「

下面附上主程式:

#include #include "stdafx.h"

#include using namespace std;

#define max 100

typedef int sortarray[max];

int _tmain(int argc, _tchar* argv)

cout<<"正在排序請稍後....."<

資料結構與演算法 十個排序演算法之六 快速排序

快速排序是由 東尼 霍爾 所發展的一種排序演算法。在平均狀況下,排序 n 個專案要 n log n 次比較。在最壞狀況下則需要 n2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 n log n 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效率地被實現出...

資料結構與演算法之快速排序

1.快速排序的 實現如下 include using namespace std template void sort t data,size t head,size t tail templatesize t partition t data,size t head,size t tail tem...

資料結構與演算法之快速排序

快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 該方法的基本思想是 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 ...