快速排序python實現

2021-09-28 17:53:58 字數 1570 閱讀 4812

快速排序和歸併排序有點相似,歸併排序是先「切分」後排序,而快速排序是先排序後切分。快速排序中,乙個待排序的陣列右兩個指標分別指向收尾,並且指定乙個基準數,基準數一般是待排序陣列的頭元素,通過比較指標所指元素和基準數的值,不斷進行交換,當兩個指標指向同一元素時,基準數歸位。基準數左側數都小於基準數,右側都大於基準數。這樣就進行了一遍快速排序。然後繼續對基準數左側所有元素和右側所有元素分別進行遞迴操作。

# 交換元素

defchange

(arr, i, j)

: t = arr[i]

arr[i]

= arr[j]

arr[j]

= t# 快速排序

defquicksort

(arr)

: low =

0# 頭指標

high =

len(arr)-1

# 尾指標

# 當陣列為空或只有乙個元素時返回

iflen

(arr)

<=1:

return

list

(arr)

base_ini = low # 記錄最初基準數的未知

base_index = low # 基準數索引

# 執行一遍快速排序

while

(low < high)

:# 搜尋右側小於基準數的元素位置

while

(arr[high]

>= arr[base_index]

and low < high)

: high -=

1# 交換(如果沒有搜到也可以交換,原陣列不發生變化)

change(arr, base_index, high)

base_index = high

# 搜尋左側大於基準數的元素位置

while

(arr[low]

<= arr[base_index]

and low < high)

: low +=

1 change(arr, base_index, low)

base_index = low

# 用base_ini判斷基準數索引是否發生變化,沒有變化說明原陣列已經排好序

if base_index == base_ini:

return arr

# 「分而治之」, 分別對基準數左右側元素排序

left = quicksort(arr[

:base_index]

) right = quicksort(arr[base_index+1:

])# 拼接並返回

return left +

[arr[base_index]

]+ right

arr =[5

,2,1

,4,3

,2,5

,6,7

,8,2

,4]new_arr = quicksort(arr)

print

(new_arr)

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 單個列表快速排序函式 返回一次排序後的列表和所選取基數...