目录
算法思想
通过快速排序将要排序的数据分为独立的两部分,其中一部分的数据比另外一部分的数据都要小,然后再按照此方法对这两部分数据分别再进行快速排序,整个过程可以递归进行,以此达到整个序列都有序。快速排序和归并排序是互补的:归并排序将序列分成两个子序列分别排序,并将有序的子序列归并以将整个序列排序;而快速排序将序列排序的方式则是当两个子序列都有序时整个序列也就自然有序了。前者递归调用发生在处理整个序列之前;后者的递归调用则发生在处理整个序列之后。在归并排序中,一个序列被等分为两半;在快速排序中,切分的位置取决于序列的位置。
实现步骤
首先选取任意元素作为基准元素(一般是第一个元素),将所有比基准元素小的元素都排到其前面,比基准元素大的都排到其后面,这样就完成了一趟快速排序。然后从基准元素分出的两个子序列中再分别选出基准元素执行上述操作,直到不可再切分。
源码
C++实现
递归版本
void QuickSort (vector<int> &vec, int first, int last)
{
if (first < last)
{
int i = first, j = last, key = a[first];
while (i != j)
{
while (j > i