Python排序演算法之快速排序

2022-07-09 08:00:08 字數 1403 閱讀 6825

快排的思想:首先任意選取乙個資料(通常選用陣列的第乙個數)作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。

一趟快速排序的演算法是:

1)設定兩個變數i、j,排序開始的時候:i=0,j=n-1;

2)以第乙個陣列元素作為關鍵資料,賦值給key,即key=a[0];

3)從j開始向前搜尋,即由後開始向前搜尋(j--),找到第乙個小於key的值a[j],將a[j]和a[i]互換;

4)從i開始向後搜尋,即由前開始向後搜尋(i++),找到第乙個大於key的a[i],將a[i]和a[j]互換;

5)重複第3、4步,直到i=j; (3,4步中,沒找到符合條件的值,即3中a[j]不小於key,4中a[i]不大於key的時候改變j、i的值,使得j=j-1,i=i+1,直至找到為止。找到符合條件的值,進行交換的時候i, j指標位置不變。另外,i==j這一過程一定正好是i+或j-完成的時候,此時令迴圈結束)。

時間複雜度:o(nlgn)

#

quicksort by alvin

defquicksort(mylist,start,end):

#判斷low是否小於high,如果為false,直接返回

if start

i,j =start,end

#設定基準數

base =mylist[i]

while i

#如果列表後邊的數,比基準數大或相等,則前移一位直到有比基準數小的數出現

while (i < j) and (mylist[j] >=base):

j = j - 1

#如找到,則把第j個元素賦值給第個元素i,此時表中i,j個元素相等

mylist[i] =mylist[j]

#同樣的方式比較前半區

while (i < j) and (mylist[i] <=base):

i = i + 1mylist[j] =mylist[i]

#做完第一輪比較之後,列表被分成了兩個半區,並且i=j,需要將這個數設定回base

mylist[i] =base

#遞迴前後半區

quicksort(mylist, start, i - 1)

quicksort(mylist, j + 1, end)

return

mylist

mylist = [49,38,65,97,76,13,27,49]

print("

quick sort: ")

quicksort(mylist,0,len(mylist)-1)

print(mylist)

輸出結果:

Python排序演算法之快速排序

從列表中抽取乙個元素p 假定為第乙個 使p歸位,保證左邊的元素都比p小,右邊的元素都比p大。再遞迴呼叫完成排序 最壞情況 o n 2n 2 n2 平均情況 o nlogn 最好情況 o nlogn 最壞情況 o n 平均情況 o logn 不穩定 較複雜 一開始,從列表中隨機抽取乙個數與第乙個元素互...

python演算法之快速排序

步驟為 1 從數列中挑出乙個元素,稱為 基準 pivot 2 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分割槽結束之後,該基準就處於數列的中間位置。這個稱為分割槽 partition 操作。3 遞迴地 recursive 把小於...

python演算法之快速排序

快速排序 英語 quicksort 又稱劃分交換排序 partition exchange sort 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列...