经常在面试时会有面试官要求直接写出快速排序算法,因为该算法在排序算法中占有非常重要的地位,它排序效率高,达到O(nlogn),最坏的情况也是O(n^2),它的思想为对于一个待排序的序列,首先随机选取一个元素作为枢轴,然后通过元素值的比较,将整个序列分成两部分,前一部分所有元素都小于或等于该枢轴元素值,后一部分均大于或等于枢轴元素值。然后在分成的两个序列里再递归的执行该算法。
源代码如下:
int partition(vector<int>& vec,int low,int high)
{
int i=low,j=high;
int x=vec[low];
while(i<j)
{
while(i<j && vec[j]>=x) --j;
vec[i]=vec[j];
while(i<j && vec[i]<=x) ++i;
vec[j]=vec[i];
}
vec[i]=x;
return j;
}
//快排
void Qsort(vector<int>& vec,int low,int high)
{
if(low<high)
{
int p=partition(vec,low,high);
Qsort(vec,low,p-1);
Qsort(vec,p+1,high);
}
}