快速排序作為應用非常廣泛的演算法,主要有以下兩個優點。
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...