标题话不多说,直接上代码
经典快速排序
Class solution:
def QuickSort(array, start, end):
if start < end:
index = Partition(array, start, end)
QuickSort(array, start, index-1)
QuickSort(array, index+1, end)
def Partition(array, start, end):
print(start, end)
small = start-1
base = array[end]
for i in range(start, end):
if array[i] < base:
small += 1
if small != i:
array[small], array[i] = array[i], array[small]
small+=1
array[small], array[end] = array[end], array[small]
return small
随机快速排序
import random, math
def quick_sort(arr, l, r, num):
if l < r:
# 随机选取l到r之间的数,与最后一个位置上的数进行交换
random_pos = l + int(math.floor(random.random() * (r - l + 1)))
arr[r],arr[random_pos] = arr[random_pos],arr[r]
less, more = partition(arr, l, r, num)
quick_sort(arr, l, less, arr[less])
quick_sort(arr, more, r, arr[r])
return arr
def partition(arr, l, r, num):
less = l - 1
more = r + 1
cur = less + 1
while cur < more:
if arr[cur] < num:
arr[less + 1], arr[cur] = arr[cur], arr[less + 1]
less += 1
cur += 1
elif arr[cur] > num:
arr[more - 1], arr[cur] = arr[cur], arr[more - 1]
more -= 1
else:
cur += 1
return less, more
随机快速排序利用了荷兰国旗的思想,能将小于主元的全部放在左边,大于主元的全部放在右边,而等于主元的放在中间