快速排序:
对于包含 n 个数的输入数组,快速排序算法的复杂度在最坏的情况下是Θ(n^2),虽然在最坏的情况下和插入排序相近,但是最坏的情况出现的概率很低,快速排序是实际应用中最好的选择,平均排序时间是Θ(nlgn)。
快速排序的原理也是使用分治策略,选出一个序列中的元素作为主元,然后让序列左边的都小于等于主元,右边的序列大于等于主元。由于是在序列的原地址进行的排列,当递归完成之后,排序也就完成了。
快速排序完成A = (2, 8, 7, 1, 3, 5, 6, 4)在选取尾部 4 进行第一次递归算法示意图:
Python实现代码:
import random
def Exchange(A, i, j):
temp = A[i]
A[i] = A[j]
A[j] = temp
return 0
def Partition(A, p, r):
random_num = random.choice(range(p, r+1))
Exchange(A, r, random_num)
x = A[r]
i = p - 1
for j in range(p, r):
if A[j] <= x:
i += 1
Exchange(A, i, j)
Exchange(A, i+1, r)
return i+1
def Quick_sort(A, p, r):
if p < r:
q = Partition(A, p, r)
Quick_sort(A, p, q-1)
Quick_sort(A, q+1, r)
A = [2, 8, 7, 1, 3, 5, 6, 4]
print('Before sort:', A)
Quick_sort(A, 0, len(A)-1)
print('After sort:', A)
运行结果: