快速排序
快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:在待排序元素序列中任取一个元素key,按照key将该序列分割成两子序列,左子序列中所有元素均小于key,右子序列中所有元素均大于key,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。
代码1(只在最好的情况下效率高)
int PartSort(int* a, int begin, int end)
{
int key = begin;
while (begin < end)
{
//end找小
while (begin < end && a[end] >= a[key])
--end;
//begin找大
while (begin < end && a[begin] <= a[key])
++begin;
Swap(&a[begin], &a[end]);
}
Swap(&a[key], &a[end]);
return end;
}
void QuickSort(int* a, int left, int right)
{
if (left >= right)
return;
int div = PartSort(a, left, right);
QuickSort(a, left, div - 1);
QuickSort(a, div + 1, right);
}
以上代码,如果每次选的数恰好都是中间数,快排最优