快速排序C 實現

2021-07-04 01:26:16 字數 828 閱讀 1639

最近在看《劍指offer》這本書,也在為找工作做一些準備,今天在書上看到排序在面試當中的重要性,所以下決心要好好搞一下

快速排序是一種最壞情況時間複雜度為o(n2)的排序演算法,雖然最壞情況時間複雜度很差,但是快速排序通常是在實際排序應用中最好的選擇,因為它的平均效能非常好:它的期望時間複雜度是ο(n log n) ,而且ο(n log n) 中隱含的常數因子非常小。

最壞情況劃分:當劃分產生的兩個子問題分別包含了n-1個元素和0個元素時,快速排序的最壞情況發生了。

下面是對乙個典型的子陣列a[p,r]進行快速排序的三步分治過程:

分解:陣列a[p,r]被劃分為兩個子陣列a[p,q-1]和a[q+1,r],使得a[p,q-1]中的每乙個元素都小於等於a[q],而a[q]也小於等於a[q+1,r]中的每個元素。其中,計算下標q也是劃分過程的一部分。

下面的程式實現快速排序:

quicksort(a,p,r)

if p

q=partion(a,p,r);

quicksort(a,p,q-1);

quicksort(a,q+1,r);

下面是partion過程:

partition(a,p,r)

x=a[r];

i=p-1;

for j=p to r-1

if(a[j] <= x)

++i;

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

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

return i+1;

下面就貼出**吧,在vs2012下測試通過的

排序 快速排序,C 實現

本文 的github位址 基本思想 快速排序 是對 氣泡排序 的改進。基本原理 基於分治法,在待排線性表中取乙個元素pivot作為樞軸值,通過一趟排序將待排線性表劃分為獨立的兩部分,第一部分的所有元素小於pivot,第二部分的所有元素大於等於pivot,pivot位於其最終位置。遞迴對兩個子表做快速...

快速排序 c 實現

快速排序思想 基於分治策略,對氣泡排序的一種改進。對於要排序的乙個序列,從中選一值進行排序,將其放入到正確的位置position。然後以position為界,對左右兩部分再做排序。直到劃分的長度為1。步驟 設有一待排序的序列 1.分別設定low hight指向序列的最左端 最右端 從序列中選乙個進行...

快速排序(C 實現)

include using namespace std void swap int a,int b int sort int begin,int end if beginwhile beginif begin return begin void quicksort int begin,int end...