(五)快速排序

2021-09-13 08:31:27 字數 1229 閱讀 6853

快速排序基本思想

在資料集之中,選擇乙個元素作為」基準」(pivot)。

所有小於」基準」的元素,都移到」基準」的左邊;所有大於」基準」的元素,都移到」基準」的右邊。這個操作稱為分割槽 (partition) 操作,分割槽操作結束後,基準元素所處的位置就是最終排序後它的位置。

對」基準」左邊和右邊的兩個子集,不斷重複第一步和第二步,直到所有子集只剩下乙個元素為止。

public class student {

//快速排序,是每次確定乙個元素最終位置,再對其左、其右進行排序

public static void quicksort(int arr,int low,int high)

{ if(low>=high) //注意一開始要判斷兩個下標

return;

int element=arr[low]; //將元素儲存起來

int i=low; //左指標

int j=high; //右指標

while(i=element) //注意是》=

當初始的序列整體或區域性有序時,快速排序的效能將會下降,此時,快速排序將退化成氣泡排序

一、時間複雜度

最壞時間複雜度o(n^2):每次劃分的結果都是基準關鍵字的左邊(或右邊)序列為空,而另一邊區間中的記錄僅比排序前少了一項

最好時間複雜度o(nlogn):每次劃分結果都是基準關鍵字左右兩邊的序列相等或相差1

平均複雜度o(nlogn)

二、空間複雜度

快速排序過程中需要乙個棧空間來實現遞迴

o(logn)

三、基準關鍵字的選取

基準關鍵字的選取是決定快速排序演算法效能的關鍵

①三者取中(low、mid、high)

②取隨機數( low high 隨機數)

四、不穩定排序

在中樞元素和序列中乙個元素交換的時候,很有可能把前面的元素的穩定性打亂。

還是看乙個小例項:6 4 4 5 4 7 8  9,第一趟排序,中樞元素6和第三個4交換就會把元素4的原序列破壞,所以快速排序不穩定。

排序演算法(五) 快速排序

在陣列中選取乙個數作為基準值,進行乙個partition過程,將小於該數的放在左邊,大於的放在右邊,等於的放在中間,再對左右分別進行該操作。時間複雜度 每次partition可以將乙個數字位置確定,將陣列劃分為兩部分,因此想要有序,理想情況每次剛好兩邊大小一樣,則一共需要logn次partition...

排序演算法(五) 快速排序

快速排序是一種效率很高的排序演算法,也是我們使用最多的一種排序演算法。快速排序原理 兩個指標分別指向陣列兩頭元素,將陣列第乙個元素儲存下來,作為基準數,兩個指標開始向中間移動,先移動陣列尾部指標,直到發現所指元素比基準數小時,將這時候所指向的數賦值給陣列頭部指標指向的位置,然後尾部指標停止移動,頭部...

排序演算法五 快速排序

取陣列最中間的那個數為基數 取哪乙個數為基數都可以,取中間的只是為了好理解 在左邊找乙個比基數大的數,在右邊找乙個比基數小的數,如果找到就交換兩個數的位置,交換過後再向下尋找,直到左邊的角標大於等於右邊則退出,一輪排序後,基數的左邊一定都是比基數小的,基數的右邊一定是比基數大的,注意 基數不一定還在...