python 快速排序

2021-09-23 15:33:42 字數 1266 閱讀 4873

也主要利用了分治法的思想,先將待排序序列分為兩部分。

如下圖所示,若以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 從開始位置...