STL——sort()函数

sort函数是用于排序的函数,要使用的时候要加上头文件"#include <algorithm>"。

在一些题目中需要排序,但是排序并不是题目的重点,这时使用sort()函数可以大大提高我们编写代码的效率。

1.基础排序代码:

#include <iostream>
#include <algorithm>	//记得添加这个头文件 
using namespace std;

int main(){
	int a[8] = {1, 4, 6, 2, 5, 9, 7, 3};
	int len = sizeof(a) / sizeof(int);	//获取数组长度 
	
	cout << "原数组:"; 
	for(int i = 0; i < len; i++){
		cout << a[i] << " ";
	}
	cout << endl;
	
	sort(a, a + 4);	//对前4个元素排序,默认为递增排序 
	//sort(a, a + 4, less<int>());	//设置为递增排序,这个写法和上一行是一样的 
	cout << "只对数组前4个元素:"; 
	for(int i = 0; i < len; i++){
		cout << a[i] << " ";
	}
	cout << endl;
	
	sort(a, a + len);	//默认为递增排序
	cout << "递增排序:";
	for(int i = 0; i < len; i++){
		cout << a[i] << " ";
	}
	cout << endl; 
	
	cout << "递减排序:";
	sort(a, a + len, greater<int>());	//设置为递减排序 
	for(int i = 0; i<len; i++){
		cout << a[i] << " ";
	}
	return 0;
}

//运行结果:
原数组:1 4 6 2 5 9 7 3
只对数组前4个元素:1 2 4 6 5 9 7 3
递增排序:1 2 3 4 5 6 7 9
递减排序:9 7 6 5 4 3 2 1

2.sort()函数不仅可以对整型数据进行排列,浮点型字符型也是可以的。

int main(){
	double a[8] = {1.8, 4.5, 6.2, 2.6, 5.8, 9.2, 7, 3.7};
	int len = sizeof(a) / sizeof(double);	//获取数组长度 
	...
}

//运行结果:
原数组:1.8  4.5  6.2  2.6  5.8  9.2  7  3.7
只对数组前4个元素:1.8  2.6  4.5  6.2  5.8  9.2  7  3.7
递增排序:1.8  2.6  3.7  4.5  5.8  6.2  7  9.2
递减排序:9.2  7  6.2  5.8  4.5  3.7  2.6  1.8


int main(){
	char a[8] = {'D', 'A', 'G', 'B', 'E', 'F', 'H', 'C'};
	int len = sizeof(a) / sizeof(char);	//获取数组长度 
	...
}

//运行结果:
原数组:D A G B E F H C
只对数组前4个元素:A B D G E F H C
递增排序:A B C D E F G H
递减排序:H G F E D C B A

3.不仅可以对基本数据类型进行排序,也可以对结构体进行排序,这时候需要自己定义排序规则

#include <iostream>
#include <algorithm>	//记得添加这个头文件 
using namespace std;

struct Node{
	int x;
	int y;
}s[5];

bool cmp(Node a, Node b){	//按x的从大到小排序 
	return a.x > b.x;
}

int main(){
	s[0].x = 5; s[0].y = 6;
	s[1].x = 3; s[1].y = 7;
	s[2].x = 8; s[2].y = 4;
	s[3].x = 6; s[3].y = 8;
	s[4].x = 4; s[4].y = 5;
	
	int len = sizeof(s) / sizeof(Node);
	
	cout << "原结构体:" << endl; 
	for(int i = 0; i < 5; i++){
		cout << "x:" << s[i].x << " y:" << s[i].y << endl;
	}
	cout << endl;
	
	sort(s, s + 3, cmp);	//对前3个元素排序(按x进行递减排序)
	cout << "只对结构体前3个元素进行排序(按x进行递减排序):" << endl; 
	for(int i = 0; i < len; i++){
		cout << "x:" << s[i].x << " y:" << s[i].y << endl;
	}
	cout << endl;

	sort(s, s + len, cmp);	//对结构体元素排序(按x进行递减排序)
	cout << "对结构体元素进行排序(按x进行递减排序):" << endl; 
	for(int i = 0; i < len; i++){
		cout << "x:" << s[i].x << " y:" << s[i].y << endl;
	}
	return 0;
}

//运行结果:
原结构体:
x:5 y:6
x:3 y:7
x:8 y:4
x:6 y:8
x:4 y:5

只对结构体前3个元素进行排序(按x进行递减排序):
x:8 y:4
x:5 y:6
x:3 y:7
x:6 y:8
x:4 y:5

对结构体元素进行排序(按x进行递减排序):
x:8 y:4
x:6 y:8
x:5 y:6
x:4 y:5
x:3 y:7

4.改变比较规则,改写cmp()函数即可。

bool cmp(Node a, Node b){ 
	if(a.x != b.x)
		return a.x > b.x;	//先按x递减排序,如果相等 
	else
		return a.y < b.y;	//再按y递增排序 
}

//运行结果:
对结构体元素进行排序(按x进行递减排序,如果x相等,再按y递增排序):
x:8 y:4
x:5 y:6
x:4 y:5
x:3 y:2
x:3 y:7

5.除此之外,还可以对vector容器进行排序。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool cmp(int a, int b){	//按x的从大到小排序 
	return a > b;	//先按x递减排序,如果相等 
}

int main(){
	vector<int> v;
	v.push_back(5);
	v.push_back(3);
	v.push_back(9);
	
	cout << "排序前:";
	for(int i = 0; i < v.size(); i++){
		cout << v[i] << " ";
	}
	
	cout << endl << "排序后:";
	sort(v.begin(), v.end(), cmp);
	for(int i = 0; i < v.size(); i++){
		cout << v[i] << " ";
	}
	return 0;
}

//运行结果:
排序前:5 3 9
排序后:9 5 3


氷鸢鸢鸢
2020.2.28

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值