STL排序算法sort

一、用sort对基本类型的数组从小到大或从大到小排序

 

sort(数组名+n1,数组名+n2);注意排序区间是[n1,n2),左闭右开。默认为从小到大排序,如果想要从大到小排序,需要加参数sort(数组名+n1,数组名+n2,greater<int>());

#include<iostream>
#include<algorithm>
using namespace std; 
int main(){
	int a[5]={5,4,2,1,3};
	sort(a,a+5);
	for(int i=0;i<5;i++){
		cout<<a[i]<<" ";	//输出为1 2 3 4 5 
	}
	cout<<endl;
	sort(a,a+5,greater<int>()); 
	for(int i=0;i<5;i++){
		cout<<a[i]<<" ";	//输出为5 4 3 2 1 
	}
	return 0;
}

二、用自定义的规则,对任何类型T的数组排序

形式为sort(数组名+n1,数组名+n2,排序规则结构名());

排序规则结构的定义方式:
struct 结构名
{
       bool operator()(const T & a1,const T & a2){
               //若a1应该在a2前面,则返回true
               //否则返回false
       }
}

#include<iostream>
#include<algorithm>
using namespace std; 
struct Rule1 //按个位数从小到大排序
{
	bool operator()(const int & a1,const int & a2){
		return a1%10>a2%10;
	}
};
int main(){
	int a[5]={25,34,42,61,73};
	sort(a,a+5,Rule1());
	for(int i=0;i<5;i++){
		cout<<a[i]<<" ";	//输出为25 34 73 42 61 
	}
	return 0;
}

 当然功能不至于对int型数组进行排序,我们可以对任何类型的数据添加自定义规则进行排序,例如下面对student进行自定义规则排序。

#include<iostream>
#include<string>
#include<algorithm>
using namespace std; 
class Student{
	public:
		int age;
		string name;
		Student(int a,string n){
			age=a;
			name=n;
		}
};
struct studentRule1 //按学生年龄从小到大排序
{
	bool operator()(const Student & a1,const Student & a2){
		return a1.age<a2.age;
	}
};
struct studentRule2	//按学生姓名字典序排列 
{
	bool operator()(const Student & a1,const Student & a2){
		return a1.name.compare(a2.name)<0;
	}
};
int main(){
	Student s1(20,"tony");Student s2(22,"baby");Student s3(21,"andy");
	Student s[3]={s1,s2,s3};
	sort(s,s+3,studentRule1());
	for(int i=0;i<3;i++){
		cout<<s[i].age<<" ";	//输出为 20 21 22 
	} 
	sort(s,s+3,studentRule2());
	for(int i=0;i<3;i++){
		cout<<s[i].name<<" ";	//输出为 andy baby tony 
	}
	return 0;
}

三、sort应用于vector等顺序容器

sort不只可以应用于数组,也可以应用在stl中的vector等容器上,非常的好用,这里敲了一个简单的例子。

#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
	vector<string> fruit;
	fruit.push_back("banana");fruit.push_back("apple");fruit.push_back("orange");
	vector<string>::iterator i;
	sort(fruit.begin(),fruit.end());
	for(i=fruit.begin();i!=fruit.end();i++){
		cout<<*i<<" ";			//输出为 apple banana orange 
	}
	cout<<endl;
	return 0;
} 

总结

掌握并灵活运用好sort对于我们做项目或者参加算法竞赛有非常大的帮助,毕竟重复发明轮子又耗时又低效,我们可以直接运用封装好的sort,把自己的精力更多的集中于业务逻辑上。

 

    原文作者:排序算法
    原文地址: https://blog.csdn.net/cqhblg/article/details/85872345
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞