STL的sort排序

STL的sort排序

日常我们在对数据处理时,经常会用到排序算法。其中,sort排序的由于简洁高效等特点深受人们喜爱(时间复杂度仅为O(NlogN)。下面简单介绍sort排序。

头文件

#include<algotirhm>

下面依次介绍sort排序在普通一维数组、结构体以及在类中的应用。

一维数组中的应用

对于从data【N】,假设data数组从data【0】开始赋值并对前n个值排序:

sort(data,data+n);

假设data数组从data【1】开始赋值并对前n个值排序:

sort(data+1,data+n+1);

假设data数组需要对data【a】及其后面的数,总共b个,进行排序:

sort(data+a,data+b);

结构体中的应用

推荐博主前面的文章。一道水题,用结构体进行排序。

https://blog.csdn.net/ronnie14165/article/details/80790781

核心代码贴一下:

struct milk
{
int cost;
int num;
}p[N];
bool cmp(milk x,milk y)
{
	return x.cost < y.cost;
}
...
sort(p,p+man_num,cmp);

类中的应用

对类的不同对象以不同的顺序进行排序。其中,以背包为类创造两个对象,价值以及数量。

以价值为标准进行排序:通过重载运算符<,对于背包的价值直接用sort(vec.begin(),vec.end());进行排序。

以数量为标准进行排序:通过定义比较函数,对于背包的数量直接用sort(vec.begin(),vec.end(),by_amount);进行排序。

PS:解释一下奇怪的数据knapsack temp(3*i+1,3*i*i-30*i+100),博主不想让背包的价值和数量在输入上就呈正相关,就构造了一个极点在区间内的二次函数。

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
class knapsack
{
public:
    knapsack(int a,int b):value(a),amount(b){	}
    int value,amount;
    bool operator < (const knapsack &x) const{return value<x.value;}
};
bool by_amount(const knapsack & x,const knapsack & y)
{return x.amount<y.amount;}
bool by_amount_large_to_small(const knapsack & x,const knapsack & y)
{return x.amount>y.amount;}
int main()
{
	vector<knapsack> vec;
	for(int i = 0 ; i < 10 ; i++)
	{
		knapsack temp(3*i+1,3*i*i-30*i+100);
		vec.push_back(temp);
	}
	cout << "Print the original sequence"<<endl;
	for(int i = 0 ; i < 10 ; i++)
	cout << "(" << vec[i].value << " ," << vec[i].amount << ")" <<endl;
	sort(vec.begin(),vec.end());
	cout << "Sort by value from small to large"<<endl;
	for(int i = 0 ; i < 10 ; i++)
	cout << "(" << vec[i].value << " ," << vec[i].amount << ")" <<endl;
	sort(vec.begin(),vec.end(),by_amount);
	cout << "Sort by amount from small to large"<<endl;
	for(int i = 0 ; i < 10 ; i++)
	cout << "(" << vec[i].value << " ," << vec[i].amount << ")" <<endl;
	sort(vec.begin(),vec.end(),by_amount_large_to_small);
	cout << "Sort by amount from large to small"<<endl;
	for(int i = 0 ; i < 10 ; i++)
	cout << "(" << vec[i].value << " ," << vec[i].amount << ")" <<endl;
    return 0;
}

输出:

(7 ,52)
(10 ,37)
(13 ,28)
(16 ,25)
(19 ,28)
(22 ,37)
(25 ,52)
(28 ,73)
Sort by value from small to large
(1 ,100)
(4 ,73)
(7 ,52)
(10 ,37)
(13 ,28)
(16 ,25)
(19 ,28)
(22 ,37)
(25 ,52)
(28 ,73)
Sort by amount from small to large
(16 ,25)
(13 ,28)
(19 ,28)
(10 ,37)
(22 ,37)
(7 ,52)
(25 ,52)
(4 ,73)
(28 ,73)
(1 ,100)
Sort by amount from large to small
(1 ,100)
(4 ,73)
(28 ,73)
(7 ,52)
(25 ,52)
(10 ,37)
(22 ,37)
(13 ,28)
(19 ,28)
(16 ,25)

对于sort排序方法目前就介绍到这里了。

这篇博文现在还不够完善,明天再更一下。

写在最后,希望博主能够保持自我,暑训加油啦!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值