# 快速排序方法
defpartition
(li, left, right)
: tmp = li[left]
while left < right:
while left < right and li[right]
>= tmp:
right -=
1 li[left]
= li[right]
while left < right and li[left]
< tmp:
left +=
1 li[right]
= li[left]
li[left]
= tmp
return left
# 快速排序主函式
defquick_sort
(li, left, right):#
if right > left:
mid = partition(li, left,
len(li)-1
) partition(li, mid +
1, right)
partition(li, left, mid -1)
return li
def
quick_sort
(arr)
:"""快速排序"""
iflen
(arr)
<2:
return arr
# 選取基準,隨便選哪個都可以,選中間的便於理解
mid = arr[
len(arr)//2
]# 定義基準值左右兩個數列
left, right =
,[]# 從原始陣列中移除基準值
arr.remove(mid)
for item in arr:
# 大於基準值放右邊
if item >= mid:
else
:# 小於基準值放左邊
# 使用迭代進行比較
return quick_sort(left)
+[mid]
+ quick_sort(right)
還有一種
def
partition
(arr, low, high)
:# 分割
i =(low -1)
# 最小元素的索引
pivot = arr[high]
for j in
range
(low, high)
:# 當前元素小於或等於pivot
if arr[j]
<= pivot:
i = i +
1 arr[i]
, arr[j]
= arr[j]
, arr[i]
arr[i +1]
, arr[high]
= arr[high]
, arr[i +1]
return
(i +1)
defquicksort
(arr, low, high)
:# 快速排序
if low < high:
# 當起始索引小於末端索引
pi = partition(arr, low, high)
quicksort(arr, low, pi -1)
quicksort(arr, pi +
1, high)
arr =[1
,2,34
,4,5
,65,6
,7,78
]n =
len(arr)
quicksort(arr,
0, n)
# >>arr需要排序的列表, 0 起始索引, n陣列長度 #
for i in
range
(n):
print
("{}"
.format
(arr[i]
))
動手敲演算法 快速排序
include void swap int x,int y 交換兩個數 int midian3 int a,int left,int right 三中值分割法 if a mid a right if a left a mid return a mid if 1 void quicksort int ...
python演算法之快速排序
步驟為 1 從數列中挑出乙個元素,稱為 基準 pivot 2 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分割槽結束之後,該基準就處於數列的中間位置。這個稱為分割槽 partition 操作。3 遞迴地 recursive 把小於...
python演算法之快速排序
快速排序 英語 quicksort 又稱劃分交換排序 partition exchange sort 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列...