快速排序是對氣泡排序對一種改進
***來自菜鳥教程
先從數列中取出乙個數作為基準數。
分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。
再對左右區間重複第二步,直到各區間只有乙個數。
最好:o
(log2
n)
o(\log_2 n)
o(log2n
)最壞:o(n
)o(n)
o(n)
平均:o
(log2
n)
o(\log_2 n)
o(log2n)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區分形成的兩個子...