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