快速排序是分治思想,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以进行,以此达到整个数据变成有序序列。时间复杂度下界为O(nlogn),最坏情况为O(n^2)
void quicksort(int *a,int begin,int end)
{
if(begin>=end)
return;
int i=begin;
int j=end;
int key=a[i];
while(i<j)
{
while(i<j && a[j]>=key)
j--;
a[i]=a[j];//将小于key值的放在左边
while(i<j && a[i]<=key)
i++;
a[j]=a[i];//将大于key值的放在右边
}
a[i]=key;
quicksort(a,begin,i-1);
quicksort(a,i+1,end);
}
void main()
{
int a[]={1,21,3,23,34,2};
quicksort(a,0,sizeof(a)/sizeof(a[0])-1);
for(int i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
cout<<a[i]<<" ";
}
}