Python 實現快速排序

2021-10-04 21:01:09 字數 1096 閱讀 7516

def

quick_sort

(arr,low,high)

:''' 指標交換法實現快速排序

:param arr: 所排序的陣列

:param low: 左起第一位數的位置

:param high: 左起最後一位數的位置

'''if low >= high:

return

pivot = arr[low]

# 基準數,這裡選擇左起第一位數

j = high # 哨兵j,從右往左找小於基準數的數

i = low #哨兵i,從左往右找大於基準數的數

while i != j:

#當哨兵i 和哨兵j 木有相遇

while arr[j]

>= pivot and i < j:

#因為選取最左邊為基準點,所以哨兵j 先動,

#否則可能會出現和基準點交換值不準確的情況

j -=

1while arr[i]

<= pivot and i < j:

i +=

1if i < j:

arr[i]

, arr[j]

= arr[j]

, arr[i]

if i == j:

#當哨兵i 和哨兵j 相遇,和基準點交換值

arr[low]

,arr[j]

= arr[j]

,arr[low]

quick_sort(arr,low,j-1)

quick_sort(arr,i+

1,high)

arr=[6

,1,2

,7,9

,3,4

,5,10

,8]quick_sort(arr,0,

9)print

(arr)

快速排序使用分而治之的思想。每一輪確定乙個數(基準點)的排序位置,與此同時,將比基準點小的數移到基準點左邊,比基準點大的數移到右邊。

平均時間複雜度為 o(nlogn)。每輪遍歷n次,共 logn 輪。

最壞時間複雜度為 o(n^2)

1.《啊哈!演算法》第一章

python實現快速排序

快速排序的思想是任意選取要排序的list中的乙個數pivot,每次遞迴時將list按照 小於pivot的,pivot,大於pivot的 排序,再對小於和大於pivot部分分別快速排序。function quicksort list select a pivot foreach x in list i...

Python實現快速排序

快速排序的思路 numlist 6,8,1,4,3,9,5,4,11,2,2,15,6 1 設 keys 又稱為監視哨 等於 numlist 0 i等於0 j等於len numlist 1,即如下 numlist 6,8,1,4,3,9,5,4,11,2,2,15,6 keys 6 i 0 j2 1...

python實現快速排序

coding utf 8 實現對列表中的數進行快速排序 importrandom 隨機生成乙個有1000整數的列表 number random.randint 1 1000 foriinrange 1000 列印原始列表 printnumber 單個列表快速排序函式 返回一次排序後的列表和所選取基數...