sort与qsort的cmp区别

今天看了很多关于快排的文章,果然对我这个新人来说调用sort和qsort才是王道啊。

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

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,都是升序)

int cmp(const void *a, const void *b)
{
	return *(int *)a - *(int *) b;// 因为返回值类型为int 所以仅限于整型
}

结构体一级排序:

int cmp(const void *a, const void *b)
{
	 Date *c = (Date *)a;
	 Date *d = (Date *)b;
	 return c -> mon - d -> mon;
}
结构体二级排序:

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,都是升序(默认为升序))

bool cmp(const int &a, const int &b)//cmp(const 变量类型 &a, const 变量类型 &b)
{
	return a < b;
}

结构体一级排序:

bool cmp(const Date &a, const Date &b)
{
	return a.mon < b.mon;
}

结构体二级排序:

bool cmp(const Date &a, const Date &b)
{
	if(a.mon != b.mon)
		return a.mon < b.mon;
	return a.day < b.day;
}

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

struct Road
{
    int a, b, l;
    bool operator < (const Road &i)const
    {
        return l < i.l;
    }
}road[S];

C++中的sort是C中qsort的优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值