【C/C++】排序函数sort()(基本数据类型&结构体排序)

发布时间 2023-06-26 15:40:38作者: 尚方咸鱼

库:

#include<algorithm>

sort函数原型(简化,能用就行):

/*
a和a+n是地址
对区间[a,a+n)中的元素进行排序,默认从小到大
可用cmp函数控制排序规则
*/
sort(a,a+n,cmp){}

1.基本数据类型-修改排序规则-cmp函数

#include<iostream>
#include<algorithm>
using namespace std;
int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 10};
int a_len = sizeof(a) / sizeof(a[0]);
/*
想要的排序规则是什么样,就把形式写在return语句后
如让左边大于右边,则写return a > b;即可
*/
bool cmp(int a, int b) {
	return a > b;//把结果形式写在这里即可
}
int main() {
//	sort(a,a+a_len);//小到大
	sort(a, a + a_len, cmp); //大到小
	for (int i = 0; i < a_len; i++)
		cout << a[i] << " ";
	cout<<endl;
	return 0;
}

2.结构体-修改排序规则-cmp函数 

#include<iostream>
#include<algorithm>
using namespace std;
const int N=50;
struct SS
{
	int num;
};
SS s[N];
int s_len=10;
/*
想要的排序规则是什么样,就把形式写在return语句后
如让左边大于右边,则写return a.num > b.num;即可
*/
bool cmp(SS a, SS b) {
	return a.num > b.num;//把结果形式写在这里即可
}
int main() {
	for(int i=0;i<=s_len;i++){
		s[i].num=i;
	}
	sort(s, s+ s_len, cmp); //大到小
	for (int i = 0; i < s_len; i++)
		cout << s[i].num << " ";
	cout<<endl;
	return 0;
}

 

3.结构体-修改排序规则-运算符重载

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 50;
struct SS {
	int num;
	//默认从小到大排序,需要重载"<"运算符
	bool operator<(const SS& s2) {
		return this->num < s2.num;
	}
};
SS s[N];
int s_len = 10;

int main() {
	for (int i = 0; i <= s_len; i++) {
		s[i].num = s_len - i;
	}
	sort(s, s + s_len); //小到大
	for (int i = 0; i < s_len; i++)
		cout << s[i].num << " ";
	cout << endl;
	return 0;
}