也主要利用了分治法的思想,先將待排序序列分為兩部分。
如下圖所示,若以4為劃分的標準,劃分為兩部分之後,左邊部分要比4小,右邊部分要比4大。
設定兩個游標 l跟r(l代表left,r代表right);
設定基準值pivot,有教程說隨機設定基準值效率更高,這裡設定陣列最右的那個元素為基準值;
left游標 從左向右移動,當游標指向元素大於基準值時,則跳出while迴圈,交換r游標指向的元素;
同理 right右標向左移動,當游標指向元素小於基準值時,則跳出while迴圈,交換l游標指向的元素;
當左右游標相等時停止迴圈,賦值基準值給左游標指向的元素,就得到了分治法劃分的兩部分;
對基準值左邊的元素遞迴,重複以上步驟;
注意:要設定條件退出遞迴。
class solution:
def quicksort(self,arr,l,r):
#設定兩游標
i = l
j = r
while(i > j):#定義跳出遞迴的條件
return arr
pivot = arr[r] #將待排序的最後乙個數定義為基準
while(i < j):#將待排序陣列分為兩部分,左邊部分比pivot小,右邊部分比pivot大
#兩游標從兩端往中間移動
while(i < j and arr[i] <= pivot):
i = i + 1
arr[j] = arr[i]
while(i < j and arr[j] > pivot):
j = j - 1
arr[i] = arr[j]
arr[j] = pivot
self.quicksort(arr, l, j - 1)
self.quicksort(arr, j + 1, r)
return arr
s = solution()
arraya = [4,6,2,3,1,5,7,8]
result = s.quicksort(arraya,0,len(arraya)-1)
print(result)
**執行結果:
[1, 2, 3, 4, 5, 6, 7, 8]
o(nlogn) python快速排序排序 python快速排序
import random def rand n for i in range n yield random.randint 0,1000 建立乙個隨機數列表 def createlist n lists for i in rand n return lists 挖坑法快速排序 def quick ...
排序 快速排序 Python
快速排序 快排 是非常常用的排序方法,在技術面試中出現頻率也特別高。它主要採用交換和分治的策略進行排序。是不穩定排序。步驟 1 在序列中選乙個元素作為劃分的基準元素 pivot 2 將所有不大於pivot的數字放在pivot的前面,大於pivot的數字放在pivot的後面 3 以pivot為界,對前...
python快速排序
coding utf 8 class quicksort def sort self,list,left,right 開始位置小於 位置 if left 取到中間的乙個下標值 s list left right 2 i 0 i left j 下標結束 j right while true 從開始位置...