《算法导论》第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)