这个网上的方法太多了,基本思路是一样的。
(step 1)找到序列中的一个分界点C:它左边的值都小于它,它右边的值都大于它;
(step 2)以上述分界点C分割的两个子数组进行递归。
上图转自:这里
def partition(arr,low,high):
i = ( low-1 ) # 最小元素索引
mid = arr[high]
for j in range(low , high):
# 当前元素小于或等于 pivot
if arr[j] <= mid:
i = i+1
arr[i],arr[j] = arr[j],arr[i]
arr[i+1],arr[high] = arr[high],arr[i+1]
return(i+1)
def quickSort(arr,left,right):
if left<right:
k=partition(arr,left,right)
quickSort(arr,left,k-1)
quickSort(arr,k+1,right)
####
arr = [10,7,12,15,34,16,8,9,1,5.5,28,12.3,22.1]
arr_old=arr.copy()
quickSort(arr,0,len(arr)-1)
for i in range(len(arr)):
print (arr_old[i],arr[i])