快速排序(quick sort):O(N*logN)
快速排序的速度快,效率高,快速排序采用的思想是分治思想,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
1.先令i=0,j=n-1;并将数组第一个元素作为判断基准,key=a[0];
2.从j向前搜索(j--),若找到a[j]<key,则将a[j]和a[i]互换位置。
3.从i向后搜索(i++),若找到a[i]>key,则将a[i]和a[j]互换位置。
4.重复2、3,直到i=j。
注意:第一遍快速排序并不会直接得到最终结果,只会把比key大和比key小的数分到key的两边,为得到最终的排序,还需对key两边的数组再次进行同样的操作。
模板代码如下:
void quick_sort(int a[],int left,int right)
{
if(left>=right)
{
return;
}
int i=left,j=right,key=a[left];
while(i<j)//控制在当组内排序
{
while(i<j&&a[j]>=key)
{
j--;
}
a[i]=a[j];
while(i<j&&a[i]<=key)
{
i++;
}
a[j]=a[i];
}
a[i]=key;
quick_sort(a,left,i-1);
quick_sort(a,i+1,right);
}