C++中sort的使用
注:本人比较懒,所以代码中没有写头文件啥的(溜)
sort是在algorithm头文件当中的一个排序函数,用于数组的排序。函数有三个参数,第一个为要排序的部分的首元素地址,第二个为排序部分末元素地址的下一个地址(意味着这个函数的排序区间是左闭右开的),第三个是排序方法。若没有输入第三个参数,则默认升序排序。
1、升序
int arr[10]={5,3,6,9,8,7,1,6,4,10};
sort(arr,arr+10); //升序排序,排arr[0]到arr[9]这十个数
2、降序
若想要降序排序,则需要使用标准库里的结构体模板中的greater<Type>(),其中Type为想要排序的数组的类型;或者自己写降序比较函数。示例如下:
int a[10] = { 2,4,1,23,5,76,0,43,24,65 };
sort(a, a + 10, greater<int>()); //使用greater<Type>()对int型数组a的a[0]到a[9]进行降序排序
/*----------------------------------------------------------------------------------*/
bool cmp_greater(int a, int b)
{
return a > b;
}
int b[10] = { 2,4,1,23,5,76,0,43,24,65 };
sort(b,b+10,cmp_greater); //使用自己的比较函数实现降序
3、实现对自定义类型数组的排序
这里有道题:一道洛谷的题。按照我的思路,需要用到对结构体按其中的某一个属性做排序。这里对name进行字典序排序。
struct student
{
string name="0";
int chinese=0;
int math=0;
int english=0;
int sum = 0;
};
student stu[1005];
//自定义排序函数,对student里的name进行字典序排序
bool cmp(student& s1, student& s2)
{
return s1.name < s2.name; //string的比较,按照字典序来比
}
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; ++i)
{
cin >> stu[i].name >> stu[i].chinese >> stu[i].math >> stu[i].english;
stu[i].sum= stu[i].chinese + stu[i].math + stu[i].english;
}
sort(stu, stu+n,cmp); //对stu[0]到stu[n-1]这n个按name的字典序升序来排序
return 0;
}
希望这篇文章对你有所帮助。