快速排序(C 實現)

2021-10-02 20:52:07 字數 1153 閱讀 7305

如果要排序陣列中下標從 p 到 r 之間的一組資料,我們選擇 p 到 r 之間的任意乙個資料作為 pivot(分割槽點)。我們遍歷 p 到 r 之間的資料,將小於 pivot 的放到左邊,將大於 pivot 的放到右邊,將 pivot 放到中間。經過這一步驟之後,陣列 p 到 r 之間的資料就被分成了三個部分,前面 p 到 q-1 之間都是小於 pivot 的,中間是 pivot,後面的 q+1 到 r 之間是大於 pivot 的。根據分治、遞迴的處理思想,我們可以用遞迴排序下標從 p 到 q-1 之間的資料和下標從 q+1 到 r 之間的資料,直到區間縮小為 1,就說明所有的資料都有序了。

最優時間複雜度 o(nlogn)

平均時間複雜度o(nlogn)

最差時間複雜度o(n^2) 假設此時陣列已經為有序了,但是我們仍未一直設定末尾的那個值為pivot。

其於歸併排序相比優點為:他的空間複雜度為o(1)(不考慮遞迴時的棧空間)。所以就算其最差時間複雜度可能退化到o(n^2),仍為人們傾向於使用的演算法,而且現在人們研究出了很多措施來盡量避免其退化到 o(n^2)

**:

#include

#include

using

namespace std;

intgetpartition

(vector<

int>

& nums,

int head,

int rear)

} temp=nums[rear]

; nums[rear]

=nums[i]

; nums[i]

=temp;

return i;

}void

quicksort

(vector<

int>

& nums,

int head,

int rear)

else

}int

main()

cout

size()

;quicksort

(test,

0,qsize-1)

;for

(int i=

0;isize()

;i++

)return0;

}

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