经典快排存在的问题:
若N个数原来就已经按照规定要求排好序,那么使用快排比较次数会达到最大,复杂度会达到最坏的情况O( n 2 n^2 n2),因此引入随机数,以防止该情况出现
# 快排优化版加随机数
import random
def quick_sort(arr,start, end):
if start < end:
p = partition(arr, start, end)
quick_sort(arr, start, p-1)
quick_sort(arr, p+1, end)
def partition(arr, start, end):
t = random.randint(start, end)
arr[t], arr[end] = arr[end], arr[t]
i = start - 1
pivot = arr[end]
for j in range(start, end):
if arr[j]< pivot:
i +=1
arr[i],arr[j] = arr[j],arr[i]
arr[end] = arr[i+1]
arr[i+1] = pivot
return i+1