快速排序算法是分治法的经典应用,具有非常高的效率。
import random
def quickSort(x, start, end):
if start >= end:
return
i = start
j = end
# 使用第一个元素作为枢点
key = x[start]
while i<j:
# 从后向前寻找第一个比指定元素小的元素
while i<j and x[j]>=key:
j -= 1
x[i] = x[j]
# 从前向后寻找第一个比指定元素大的元素
while i<j and x[i]<=key:
i += 1
x[j] = x[i]
x[i] = key
# 递归,分治
quickSort(x, start, i-1)
quickSort(x, i+1, end)
for i in range(100000):
# 生成随机测试数据
x = [random.randint(1,100) for i in range(20)]
y = sorted(x)
quickSort(x, 0, len(x)-1)
if x!=y:
print('error')
运行无输出,说明代码正确,与Python内置排序函数sorted()结果一致。