您的位置:首页 > 其它

sort和qsort的区别

2015-04-06 10:24 423 查看
       

首先是当然是头文件的区别了:

qsort:

#include<stdlib.h>

sort:

#include<algorithm>

using namespace std;

qsort是c里的,sort是c++里的,头文件自然不一样。

之后是调用的格式,对于qsort,它需要4个参数:

qsort(排序首地址,排序长度,排序元素长度,cmp)

而sort只需要2个或3个参数:

sort(排序首地址,排序尾地址,cmp)(2个参数就是不写cmp,这样默认是升序排列)

最后重点就是关于cmp的写法:

qsort:(以整型为例, 字符串要用strcmp,都是升序)

[cpp] view
plaincopy





int cmp(const void *a, const void *b)  

{  

    return *(int *)a - *(int *) b;// 因为返回值类型为int 所以仅限于整型  

}  

结构体一级排序:

[cpp] view
plaincopy





int cmp(const void *a, const void *b)  

{  

     Date *c = (Date *)a;  

     Date *d = (Date *)b;  

     return c -> mon - d -> mon;  

}  

结构体二级排序:

[cpp] view
plaincopy





int cmp(const void *a, const void *b)  

{  

    Date *c = (Date *)a;  

    Date *d = (Date *)b;  

    if(c -> mon != d -> mon)  

    return c -> mon - d -> mon;  

    return c -> day - d -> day;  

}  

但是对于float或double类型,如果是a - b 返回值就不是整型,在排序时会出错。所以要写成a > b? 1 : -1;的类型。

sort:(以整型为例, 字符串要用strcmp,都是升序(默认为升序))

[cpp] view
plaincopy





bool cmp(const int &a, const int &b)//cmp(const 变量类型 &a, const 变量类型 &b)  

{  

    return a < b;  

}  

结构体一级排序:

[cpp] view
plaincopy





bool cmp(const Date &a, const Date &b)  

{  

    return a.mon < b.mon;  

}  

结构体二级排序:

[cpp] view
plaincopy





bool cmp(const Date &a, const Date &b)  

{  

    if(a.mon != b.mon)  

        return a.mon < b.mon;  

    return a.day < b.day;  

}  

对于结构体也可以利用重载运算符。

[cpp] view
plaincopy





struct Road  

{  

    int a, b, l;  

    bool operator < (const Road &i)const  

    {  

        return l < i.l;  

    }  

}road[S];  

C++中的sort是C中qsort的优化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm 博客