c++标准库里的排序函数的使用方法
I)Sort函数头文件
#include<algorithm>
II)Sort函数有三个参数:
- 第一个是要排序的数组的起始地址。
- 第二个是结束的地址(最后一位要排序的地址)
- 第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
Sort函数使用模板:
Sort(start,end,排序方法)
下面就具体使用sort()函数结合对数组里的十个数进行排序做一个说明!
例一:sort函数没有第三个参数,实现的是从小到大
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[10] = { 9, 6, 3, 8, 5, 2, 7, 4, 1, 0 };
for (int i = 0; i<10; i++)
cout << a[i] << endl;
sort(a, a + 10);
for (int i = 0; i<10; i++)
cout << a[i] << endl;
return 0;
}
例二
如果要实现从大到小排序就需要加入第三个参数
需要加入一个比较函数 complare(),此函数的实现过程是这样的
bool complare(int a,int b)
{
return a>b;
}
实现程序:
#include<iostream>
#include<algorithm>
using namespace std;
bool complare(int a, int b)
{
return a>b;
}
int main()
{
int a[10] = { 9, 6, 3, 8, 5, 2, 7, 4, 1, 0 };
for (int i = 0; i<10; i++)
cout << a[i] << endl;
sort(a, a + 10, complare);//在这里就不需要对complare函数传入参数了,这是规则
for (int i = 0; i<10; i++)
cout << a[i] << endl;
return 0;
}
假设自己定义了一个结构体node
struct node
{
int a;
int b;
double c;
};
有一个node类型的数组node arr[100],想对它进行排序:先按a值升序排列,如果a值相同,再按b值降序排列,如果b还相同,就按c降序排列。就可以写这样一个比较函数:
以下是代码片段:
bool cmp(node x, node y)
{
if (x.a != y.a) return x.a<y.a;
if (x.b != y.b) return x.b>y.b;
return x.c>y.c;
}