def partition(A,p,r):
# x为分割操作的哨兵
x = A[r]
i = p-1
for j in range(p,r):
if A[j] <= x:
i = i+1
A[i],A[j] = A[j],A[i]
A[r],A[i+1] = A[i+1],A[r]
return i+1
def quicksort(A,p,r):
if p<r:
q=partition(A,p,r)
quicksort(A,p,q-1)
quicksort(A,q+1,r)
A = [2, 8, 7, 1, 3, 5, 6, 4]
quicksort(A, 0, 7)
print(A)
算法思想来自《算法导论》,是快排的最佳实践。
数据移动过程--第一轮:
2, 8, 7, 1, 3, 5, 6, 4
2, 8, 7, 1, 3, 5, 6, 4 //第一次i和j都在2上,对其进行交换,和没变一样
2(i), 8, 7, 1(j), 3, 5, 6, 4 //j继续往后走,一直到了1,准备交换
2, 1(i), 7, 8(j), 3, 5, 6, 4
2, 1, 7(i), 8, 3 (j), 5, 6, 4 //下一步交换
2, 1, 3(i), 8, 7 (j), 5, 6, 4
2, 1, 3(i), 8, 7 , 5, 6(j), 4 //第一轮即将结束,交换i+1和r
2, 1, 3(i), 4, 7 , 5, 6(j), 8
至此,第一轮结束。