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