排序方法总结

常用的排序方式包括快排、归并排序、堆排序等。

其中,快速排序对于C++来说,可以很方便使用函数qsort、sort对目标序列进行排序。

基本快速排序的方法,每次把数组分成两分和中间的一个划分值,而对于有多个重复值的数组来说,基本排序的效率较低。集成在C语言库函数里面的的qsort函数,使用三路划分的方法解决这个问题。所谓三路划分,是指把数组划分成小于划分值,等于划分值和大于划分值的三个部分。

int cmp1(const void *a, const void *b)
{
	if ((*(vector<int>*)a)[0]  == (*(vector<int>*)b)[0] ) {
		return (*(vector<int>*)a)[1] < (*(vector<int>*)b)[1];   // 从大到小排序
	}
	else
	    return (*(vector<int>*)a)[0] > (*(vector<int>*)b)[0];   // 从小到大排序
}

int paixu(vector<vector<int>>& envelopes) {
		qsort(&envelopes[0], envelopes.size(), sizeof(vector<int>(2)), cmp1);
		for (auto i : envelopes)
		    cout << i[0] << ' ' << i[1] << ' ' << endl;
		return dp.size() - 1;
	}

sort是qsort的升级版,如果能用sort尽量用sort,使用也比较简单,不像qsort还得自己去写 cmp 函数,只要注明  使用的库函数就可以使用,参数只有两个(如果是普通用法)头指针和尾指针;

默认sort排序后是升序,如果想让他降序排列,可以使用自己编的cmp函数

注意:sort函数的cmp必须定义为全局域上,在类内会报错。

// 自定义方法一
sort(envelopes.begin(), envelopes.end(), [](const auto& e1, const auto& e2) {
		return e1[0] < e2[0] || (e1[0] == e2[0] && e1[1] > e2[1]);
	});

// 自定义方法二
bool compare(int a,int b)
{
  return a>b; //降序排列,如果改为return a<b,则为升序
}
sort(*a,*b,cmp);

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值