一趟快速排序的过程(从前向后)
首先选取一个元素(通常选第1个元素)作为基准元素, 38,49,13,76,97,50,27,65 38为基准元素,将所有排序码比基准元素排序码小的元素都安置在基准元素的左侧,而所有排序码比基准元素排序码大的元素都安置在基准元素的右侧。最后以基准元素所在的位置作分界线,将序列分割成两个子序列,称为一次划分。(即每排一次序小于基准元素的在基准元素左边,大于基准元素的在基准元素右边)
每次排序具体实现方法: 设两个指针low 和 high ,它们的初值 分别指向待排序元素序列的首元素和尾元素,设基准元素的排序码为pivot,其位置为pivotpos。先从low+1所指位置向后搜索,找到第1个排序码小于pivot的元素,pivotpos++; 令该元素与pivotpos位置上的元素交换;重 复此操作直到最后一个元素,最后交换基准元素和pivotpos位置上的元素;一次划分完成。
利用递归将待排序列一分为2,2分为4……,每个序列在执行排序,因为当每次待排的小序列左边界下标等于基准元素时说明这个序列已经排完,所以以左边界left是否小于基准元素下标作为递归的判断条件。
Partition函数实现具体每个分序列的基准元素移动到小大序列的中间
QuickSort实现每次的将待排序列的划分