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];
}