快速排序C 實現

2021-08-22 11:51:08 字數 1176 閱讀 6376

快速排序的思想近似於bst里根節點與左右節點的關係。

大致思想是選擇乙個軸值,然後把陣列裡比軸值小的放在左邊,比軸值大的放在右邊,通過遞迴處理兩邊的陣列達到總體排序的效果。

主框架如下:

templatevoid qsort(e a, int i, int j)
findpiovt函式找乙個軸值

影響快排時間複雜度最大的就是軸值的選擇,對於未排序的陣列而言,軸值的選擇最好是隨機的,這裡簡單的取陣列中間的值作為軸值。

templateint findpivot(e a, int i, int j)
partition函式用來交換陣列軸值左右的元素

不需要保證交換後陣列是有序的,這交給接下來分隔後的陣列去做。

templateint partition(e a, int l, int r, e& pivot)  while (l < r);                            //左右邊界交錯即停止

swap(a, l, r); //交錯後會有一次不必要的交換,這裡把它調整過來

return l; //返回此時的左邊界

}

測試**如下:

#includeusing namespace std;

templatevoid swap(e a, int a, int b)

templateint partition(e a, int l, int r, e& pivot) while (l < r);

swap(a, l, r);

return l;

}templateint findpivot(e a, int i, int j)

templatevoid qsort(e a, int i, int j)

int main() ;

qsort(arr,0,(sizeof(arr)/sizeof(int))-1);

for(auto i : arr){

cout《說一下時間複雜度

一般認為快排的時間複雜度為θ(nlogn),最差情況就是軸值的選擇沒有很好的分隔陣列,選擇了最大或最小的那個數,那麼在下一次遞迴排序中需要排序的陣列大小和原來差不多大,此時的時間複雜度就變為o(n²)。

排序 快速排序,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...