快速排序
快速排序相对于其他的排序算法是较为快速的一种排序算法,主要体现在它的时间复杂度上.它的主要思想是:先选取一个值做关键字,通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录均比关键字小,另一部分记录均比关键字大,则可分别对这两部分记录继续进行排序,以达到整个有序的目的.
因此快速排序中最重要的就是划分区间,在下文的实现中我将介绍三种类型的单趟排序.
一.左右指针法
先找到一个值做关键字(可以选择最后一个元素也可以选择第一个元素),在我的代码实现中我选取的是最后一个元素做关键字,从左边开始找比关键字大的元素,从右边开始找比关键字小的元素,将左右找到满足题意的值交换,当左右相遇时说明一趟排序已经结束,此时需要将相遇点与关键字交换.
int PastSortA(int *a,int start,int end)
{
int left=start;
int right=end;
int ret=GetMid(a,start,end);
swap(a[ret],a[end]);
int pivotkey=a[end]; //最后一个做关键字
while (left < right)
{
//left找比pivot