快速排序Quicksort
平均时间复杂度:O(N*logN)
基本思想:(分治)
先从数列中取出一个数作为key值;
将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边;
对左右两个小数列重复第二步,直至各区间只有1个数。
c++代码实现如下:
void QuickSort(int a[],int l,int r){
if(l>=r) return;
int i=l;
int j=r;
int k=a[l];
while (i<j)
{
while (i<j&&a[j]>k)//从右向左找到第一个小于k的值
j--;
if(i<j){
a[i]=a[j];
i++;
}
while(i<j&&a[i]<k)//从左向右找到第一个大于k的值
i++;
if(i<j){
a[j]=a[i];
j--;
}
}
a[i]=k;
for(int i=0;i<8;i++)
cout<<a[i]<<" ";
cout<<endl;
QuickSort(a,l,i-1);//k值左边区域递归
QuickSort(a,i+1,r);//k值右边区域递归
}
int main(void){
int a[]={42,20,17,13,28,14,23,15};
cout<<"长度;"<<sizeof(a)/sizeof(int)<<endl;
//BubbleSort(a,8);
//SelectSort(a,8);
//InsertSort(a,8);
//ShellSort(a,8);
QuickSort(a,0,7);
system("pause");
return 0;
}
结果如下:
https://www.runoob.com/w3cnote/sort-algorithm-summary.html