python寫快排 python 實現快速排序

2021-10-11 20:40:33 字數 1331 閱讀 7562

python排序演算法之快速排序

快速排序(quicksort)

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

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

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)

# -*- coding: utf-8 -*-

def quicksort(mylist, start, end):

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

if start < end:

i, j = start, end

# 設定基準數

base = mylist[i]

while i < j:

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

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

j = j - 1

# 同樣的方式比較前半區

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

i = i + 1

mylist[i], mylist[j] = mylist[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實現快排演算法 python快排演算法詳解

快排是python經典演算法之一。1 下面講解的是什麼是快排和快排的圖示。2 快排是一種解決排序問題的運算方法。3 快排的原理 在陣列中任意選擇乙個數字作為基準,用陣列的資料和基準資料進行比較,比基準數字打的數字的基準數字的右邊,比基準數字小的數字在基準數字的左邊,第一次排序之後分為比基準資料大或比...

覺得python寫快排真的簡單易懂

記錄下自己學習python的學習路 快速排序 def mysort l if len l 2 如果列表中只有乙個元素就會返回 return l num l 0 拿乙個元素作為參考元素 startl x for x in l 1 if x num 使用列表推導式把小於等於參考元素的放入新的列表 end...

python實現快排

學習python,隨便寫了下快排,如下 coding utf 8 快速排序演算法實現 import sys sys.setrecursionlimit 1000000 設定最大遞迴深度,這裡設定為一百萬 def kuaipai ii,jj,data list global s s 1 記錄遞迴的深度...