快速排序詳解 演算法筆記實現方式

2021-10-03 23:32:09 字數 2349 閱讀 4990

快速排序是對氣泡排序對一種改進

***來自菜鳥教程

先從數列中取出乙個數作為基準數。

分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。

再對左右區間重複第二步,直到各區間只有乙個數。

最好:o

(log⁡2

n)

o(\log_2 n)

o(log2​n

)最壞:o(n

)o(n)

o(n)

平均:o

(log⁡2

n)

o(\log_2 n)

o(log2​n)o(

n2

)o(n^2)

o(n2

)不穩定

順序儲存

1、對於把大的數放到基準數右邊,消小的數放到基準數左邊

有很多方法

這裡使用two pointers

①先將 a[1]存至某個臨時變數 temp,並令兩個下標 left、right 分別指向序列首尾(如令left=1、right=n)

②只要 right 指向的元素 a[right] 大於 temp,就將 right 不斷左移;當某個時候 a[right] ≤temp 時,將元素 a[right]挪到 left 指向的元素 a[left]處。

③只要 left 指向的元素 a[left] 不超過 temp,就將 left 不斷右移;當某個時候 a [left]> temp 時,將元素 a[left]挪到 right 指向的元素 a[right]處。

④重複②③,直到 left 與 right 相遇,把 temp(也即原 a [1]) 放到相遇的地方。

**實現此功能

// 對於[left,right]區間進行劃分

intpartition

(int a,

int left,

int right)

a[left]

= temp;

//把temp放到left與right相遇的地方

return left;

//返回相遇的位置的下標

}

2、快速排序實現
void

quicksort

(int a,

int left,

int right)

}

3、程式例項實現
/*

* @descripttion:

* @version:

* @author: edisonhuang

* @date: 2020-03-16 14:45:02

* @lasteditors: edisonhuang

* @lastedittime: 2020-03-16 15:22:25

*/#include

intpartition

(int a,

int left,

int right)

;void

print

(int a,

int len)

;void

quicksort

(int a,

int left,

int right)

;using

namespace std;

intmain()

;int len =

(int

)sizeof

(arr)

/sizeof

(*arr)

;print

(arr,len)

;quicksort

(arr,

0, len -1)

;print

(arr,len);}

intpartition

(int a,

int left,

int right)

while

(left < right && a[left]

<= temp)

left++

;//反覆左移right

if(left < right)

} a[left]

= temp;

//把temp放到left與right相遇的地方

return left;

//返回相遇的位置的下標

}void

quicksort

(int a,

int left,

int right)

}void

print

(int a,

int len)

cout << endl;

}

詳解python實現快速排序演算法

快速排序嚴重依賴分割槽,分割槽部分完成就代表排序成功了一半 1 詳細思路見 注釋部分 def quick sort l,low,high 分割槽的過程 low代表左指標,high代表右指標 1 low會逐個向右移動,遇到大於或等於基準元素時,停止 2 high會逐個向左移動,遇到小於或等於基準元素時...

排序演算法C 實現之快速排序詳解

將一組大規模無序陣列變為有序 在陣列中隨機選擇乙個數作為基準數temp,在陣列中從後往前找乙個比temp小的數lo,交換lo和temp 在陣列中從前往後找乙個比temp大的數hi,交換temp和hi 重複2 3找lo和hi,直到找不到這樣的數lo,hi。此時temp左邊的數都 它,右邊的數都 它。此...

快速排序演算法詳解

1.1 演算法分析 快速排序是一種不穩定的,時間複雜度為o nlogn 的排序演算法.基本思想 1.選定基準值key。2.通過雙指標不斷地移動,將比key大的值移動到key的右邊,比key小的值移動到key的左邊,直到雙指標相遇 即代表該過程已完成 3.上述過程完成後,對於以原key區分形成的兩個子...