C++中sort函数
用法:
-
头文件: #include
-
参数:两个参数或三个参数
-
使用的排序方法是类似于快速排序的方法,时间复杂度为 n*log2(n);
-
sort函数有三个参数:(第三个参数可以不写)
第一个是要排序的数组的起始地址;
第二个是结束的地址;
第三个参数是排序的方法,可以是[降序]、也可[升序],还可以不写第三个参数、此时默认[升序]排序。
两个参数用法:
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN = 101;
int arr[MAXN];
int main()
{
int n;
while(cin>>n)
{
for(int i =0;i<n;i++) //输入一组数字
{
cin>>arr[i];
}
sort(arr, arr+n); //使用头文件<algorithm>中的sort函数
for(int i=0;i<n;i++)
{
cout<<arr[i]<<" "; //输出结果
}
}
cout<<"\n";
return 0;
}
//输出结果是升序排列。
三个参数用法:
形式:sort(arr, arr+Size, Compare);
Compare函数为bool型,其返回值true时,表示的是第1个参数将排在第2个参数前面。
可以通过编写Compare函数改变sort的排序规则。
结构体排序:
/*题目: 用一堆数组存储学号和成绩,然后按成绩排序输出 */
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct Student{
int number;
int score;
};
const int MAXN = 100;
Student arr[MAXN];
bool Compare(Student x, Student y) //比较函数
{
if(x.score == y.score) //成绩相等比较学号
{
return x.number < y.number;
}
else //成绩不等比较成绩
{
return x.score < y.score;
}
}
int main()
{
int n;
cin>>n;
if(1 <= n <= 100)
{
for(int i=0; i<n; i++)
{
cin>>arr[i].number>>arr[i].score;
}
sort(arr, arr+n, Compare); //按照比较函数排序
for(int i=0;i<n;i++)
{
cout<<arr[i].number<<" "<<arr[i].score<<endl;
}
}
return 0;
}
降序:
bool Compare(int a,int b)
{
return a > b; //降序排列,如果改为return a < b, 则为升序。
}
绝对值排序:
#include<cmath>
bool Compare(int a,int b)
{
return abs(a) > abs(b);
}