自學筆記之快速排序

2021-06-27 08:12:40 字數 1152 閱讀 2178

快速排序作為應用非常廣泛的演算法,主要有以下兩個優點。

1.所需的平均時間複雜度為o(nlgn)(最差時間複雜度為o(n2)),其中的係數常數小。

2.為原地排序,所需的空間複雜度小。

與歸併排序類似,使用了分治法來排序陣列。

divide:將陣列a[p…r]分成兩個子陣列a[p..q-1]和子陣列a[q+1..r],a[p..q-1]中的每個元素都小於等於a[q],子陣列a[q+1..r]都大於a[q]。

conquer:通過遞迴呼叫快排來排序兩個子陣列。

combine:由於兩個子陣列通過遞迴呼叫已經排好了,不需要多餘的工作來組合結果,陣列a[p..r]已經是排序好的陣列。

快速排序執行的偽**如下:

通過呼叫quicksort(a,1,a.length)來排序陣列a。

下面是實現分離操作的偽**:

下圖為分離操作的實際過程:

圖1-1 快速排序的分離過程**分析

快速排序的c++**如下:

#includeusing namespace std;

void quicksort(int *,int,int);

int partition(int *,int,int);

int main()

{ int a[10];

//input ten numbers

for(int i=0;i<10;i++)

cin>>a[i];

quicksort(a,0,9);

for(int i=0;i<10;i++)

{ cout<

自學筆記之歸併排序

自學筆記之歸併排序 歸併排序主要利用了分治思想,它的過程如下 1.分解成子問題 將n個元素分解為兩個具有n 2的子問題。2.遞迴求解子問題 利用遞迴排序這兩個子問題。3.歸併子問題 歸併子問題的解來產生排序好的答案。歸併排序中最終要的一步是將兩個子問題的解合併,在這裡我們設計乙個函式merge a,...

python筆記 之 快速排序

quick sort a,p,r if pdef quick sort a,p,r quick sort用遞迴法實現對陣列進行排序 正序 a是乙個僅包含數值型的列表 p,r是列表a的下標,且滿足p r if pq partition a,p,r quick sort a,p,q 1 quick so...

演算法筆記(七) 之快速排序

老規矩 妹妹鎮樓 用two pointers的方法解決,設定兩個指標,分別指向序列a的首尾。令兩個下標指向首尾,即left指向a 1 right指向a n 並將a 1 存至temp中。從序列末端開始,只要a right 大於temp,則將right不斷左移,當a right temp時,就將a ri...