sort() 函数的用法

一、sort 函数的基本知识

1、sort 函数位于头文件 #include<algorithm> 中,是C++标准库中的函数。
2、sort 函数原型如下,包含三个参数分别为

void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
  • first :第一个是待排序序列的起始地址。
  • last:第二个是待排序序列的结束地址。
  • comp:第三个是排序方法,可以自己设定排序的规则。可以省略该参数,此时默认的是升序排列。

3、排序的序列是 [ first , last ) ,左闭右开的区间。即不包含最后一个地址所指的元素
4、 sort 函数的时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn)

二、常见应用

1、基本数据类型的排序

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>

using namespace std;

// 创建排序规则
bool comp01(const int &a, const int &b)
{
	return a > b;
}

int main()
{
	vector<int> v1 = { 10,20,40,5,60,9 };
	int arr[] = { 10,2,30,5,1,80,56 };
	// 默认的升序排列
	sort(v1.begin(), v1.end()); 
	//按照指定的规则进行降序排列
	sort(v1.begin(), v1.end(), comp01);
	// 对前四个元素进行排序。arr+4表示从起始位置向偏移4个位置
	sort(arr, arr + 4);
	cin.get();
}

2、自定义数据类型的排序

自定义的数据类型进行排序时,必须要指定排序的规则,因为自定义的数据类型可能是复合类型,若不指定排序规则,程序无法知道根据什么来进行排序

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>

using namespace std;

class A
{
public:
	A(string x, int y, double z) :name(x), age(y), score(z) {}

	string GetName()
	{
		return name;
	}

	int GetAge() 
	{ 
		return age;
	}

	int GetScore()
	{
		return score;
	}
private:
	string name;
	int age;
	int score;
};

// 创建排序规则:按年龄由大到小排序
bool comp01(A x, A y)
{
	return x.GetAge() > y.GetAge();
}

// 按分数由低到高排序
bool comp02(A x, A y)
{
	return x.GetScore() < y.GetScore();
}

void PrintVector(vector<A> v)
{
	for (auto &res : v)
	{
		cout << "name = " << res.GetName() << " \tage = " << res.GetAge() << " \tscore = " << res.GetScore() << '\n';
	}
	cout << endl;
}

int main()
{
	vector<A> v;
	A a1("tom", 10, 80);
	A a2("kity", 8, 88);
	A a3("Li", 15, 99);
	A a4("Zhang", 7, 82);

	v.push_back(a1);
	v.push_back(a2);
	v.push_back(a3);
	v.push_back(a4);

	// 对于自定义数据结构类型的排序必须要指定排序规则,否则程序不知道按那个成员的值进行排序
	sort(v.begin(), v.end(), comp01);
	PrintVector(v);

	sort(v.begin(), v.end(), comp02);
	PrintVector(v);

	cin.get();
}

运行结果如下:
在这里插入图片描述
【当在类中的使用sort函数时,需要将比较的规则定义成 static 类型的】

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值