C++入门——排序

来源:互联网 发布:程序员鄙视链图 编辑:程序博客网 时间:2024/05/17 15:37

给大家介绍一下排序算法

最容易想到的 : 每次找最大的放在序列最后
n^2 光荣爆炸

——>分治
将序列每次一分为二,递归下去,分别排好两部分
复杂度 :: nlogn
(归并排序)

快速排序:
将序列分为一边全部比一边的两部分
这样就不用合并了。。。

归并排序实现:

int a[10005],b[10005];void Fsort(int l,int r){    if(l==r)return;    int mid=(l+r)/2;    Fsort(l,mid),Fsort(mid+1,r);    memcpy(b+l,a+l,sizeof(int)*(r-l+1));    int i=l,j=mid+1,cnt=l;    while(i<=mid&&j<=r){        if(b[i]<b[j])a[cnt++]=b[i++];        else a[cnt++]=b[j++];    }    if(i>mid)        while(j<=r)a[cnt++]=b[j++];    if(j>r)        while(i<=mid)a[cnt++]=b[i++];}

STL函数:

sort  <---> stable_sortsort(a+1,a+n+1);stable_sort(a+1,a+n+1);

还可以自定义比较函数

bool cmp(int i,int j){    return i > j;}sort(a+1,a+n+1,cmp);

具体请参见ClassFOO

1 0
原创粉丝点击