《算法导论》第7章内容
核心思想是分治,把最后的元素x放在中间,使得左边都小于x,右边都大于x
随机化是将主元选取随机化,先拿任何一个元素和最后的元素交换,然后把它当成主元
import random
def Partitions(A,p,r):
i = p-1
x = A[r]
for j in range(p,r):
if A[j]<x:
i+=1
temp = A[i]
A[i] = A[j]
A[j] = temp
temp = A[i+1]
A[i+1] = A[r]
A[r] = temp
return i+1
def QucikSort(A,p,r):
if p<r:
q = Partitions(A,p,r)
QucikSort(A,p,q-1)
QucikSort(A,q+1,r)
def RandomizedPartition(A,p,r):
i = random.randint(p,r)
temp = A[i]
A[i] = A[r]
A[r] = temp
return Partitions(A,p,r)
def RandomizedQuickSort(A,p,r):
if p<r:
q = RandomizedPartition(A,p,r)
RandomizedQuickSort(A,p,q-1)
RandomizedQuickSort(A,q+1,r)
A = [2,8,7,1,3,5,6,4]
QucikSort(A,0,len(A)-1)
print(A)
B = [2,8,7,1,3,5,6,4]
RandomizedQuickSort(B,0,len(B)-1)
print(B)