思想:把数组随机挑一个主元,把数组比它小的全放左边,大的全放右边,递归即为排序数组。
分治部分流程(partition)
1、随机挑一个主元pivot, 记录它的值x = a[pivot], 将pivot与end的值互换。
2、定义两个计数变量,一个storeindex,一个i, 其中storeindex用来记录x排序后应在的坐标。
3、for i=0..(end-1), if (a[i] < x) then swap(a[storeindex], a[i]), storeindex++. 即保证storeindex左边的数一定小于x
4、跳出循环,即i=end-1, 此时所有数都与x比较过了,storeindex的坐标位置左侧全小于x。再将storeindex位置的数与a[end](即主元)互换,完成partition过程。
递归过程:
quicksort()
{
if start == end return
index = partiton(start, end)
if index>start quicksort(start, index-1)
if index<end quicksort(index+1, end)
}