擼袖子敲python演算法之快速排序(手敲)

2021-10-10 09:22:11 字數 2079 閱讀 5973

# 快速排序方法

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 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列...