基本排序演算法之3 快速排序quicksort

2022-03-22 00:09:11 字數 534 閱讀 9670

快排的思路就不說了,中軸分組,借助乙個臨時單元。時間複雜度o(nlogn)。下面是實現:

#includeusing namespace std;

templatebool _less(t a,t b)

a[first]=temp;

qsort(a,first,f);

qsort(a+last+1,n-last-1,f);

}templatevoid show(t a,int n)

注意幾點:

1.模板類支援預設模板引數。模板函式或者成員模板函式不支援預設模板引數(stl裡的sort是通過過載了兩份函式支援第三個引數!而不是用預設模版引數!!)

2.模版函式呼叫不要寫型別引數,編譯器自動推斷。

3.遞迴的關鍵就在於邊界條件是否考慮完全。

4.參考書表示:選取第乙個元素為中樞是錯誤的,常用的是三分中值分割法(median of three partitioning)!!就是取a[first]、a[last]、a[(first+last)/2]的中間值。

基本排序演算法之快速排序

快速排序演算法是一種劃分交換的方法,它採用分治法進行排序。其基本思想是 設要排序的 陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的 排序...

基本排序之快速排序

快速排序分為經典快速排序和隨機快速排序,因為經典快速排序在工程上使用比較少,因此本文只將隨機快速排序,它可以看作是經典快速排序的公升級版本。快速排序 概述 1 先生成乙個隨機數,作為下標,此下標對應的元素作為劃分值。2 將劃分值與元素末尾的數值進行交換,讓劃分值處於末尾。3 然後用partition...

排序演算法之快速排序

快速排序使用分治法 divide and conquer 策略來把乙個序列 list 分為兩個子串行 sub lists 步驟為 從數列中挑出乙個元素,稱為 基準 pivot 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分割槽退出...