排序(2)

5、快速排序

基本思想:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,达到序列有序。

时间复杂度O(nlogn)  但是不稳定的排序。

#include<algorithm>

bool cmp(int a,int b)

{

return a<b;

}

int  main()

{

int a[10001];

……

sort(a,a+n,cmp)

6、归并排序

采用分治思想将序列分为若干个子序列,然后将子序列排序并合并

void msort(int s,int t)
{
if(s==t) return;
int mid=(s+t)/2;
msort(s,mid); //分解左左序列
msort(mid+1,t) //分解右左序列
int i=s,j=mid+1,k=s;
while(i<=mid&&j<=t)
{
if(a[i]<=a[j])
{
r[k]=a[i];k++;i++;
}
else
{
r[k]=a[j];k++;j++;
}
}
while(i<=mid)
{
r[k]=a[i];k++;i++;
}
while(j<=t)
{
r[k]=a[j];k++;j++;
}
for(int i=s;i<=t;i++) a[i]=r[i];
}

 

posted @ 2020-02-23 20:32  赵学霖  阅读(84)  评论(0)    收藏  举报