首页 > 代码库 > sort函数
sort函数
sort函数:#include <algorithm>
默认从小到大,如果降序可写第三方函数进行排序,
EXP:sort(array,array+n,cmp)
①sort(数组首地址,首地址+排序个数)
第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。
也就是说,排序的区间是[a,b)。
简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了,默认的排序方式是升序。
②sort(数组首地址,首地址+排序个数,比较函数)
1.普通排序,升序
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[10]={7,3,4,6,5,1,2,9,8,0};
sort(a,a+10); ///////////////此处数组范围必须用 a+10 的格式,不能用 sizeof(a)
for(int i=0;i<10;i++) ///////也可以用 sort(a,a+sizeof(a)/4),此处相当于sort(a,a+10)
cout<<a[i]<<" ";
return 0;
}
OUTPUT:0 1 2 3 4 5 6 7 8 9
普通排序,降序
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int a[10]={7,3,4,6,5,1,2,9,8,0};
sort(a,a+10,cmp);
for(int i=0;i<10;i++)
cout<<a[i]<<" ";
return 0;
}
OUTPUT:9 8 7 6 5 4 3 2 1 0
2.结构体排序,a升,b降,c降
#include <iostream>
#include <algorithm>
using namespace std;
struct data
{
int a;
int b;
int c;
};
bool cmp(data x,data y)
{
if(x.a!=y.a) return x.a<y.a;
if(x.b!=y.b) return x.b>y.b;
if(x.c!=y.c) return x.c>y.c;
}
int main()
{
.....
sort(array,array+n,cmp);
return 0;
}
------------------------------------
普通排序例子:
#include<iostream>
#include<iomanip>
#include <stdio.h>
#include<cstring>
#include <algorithm>
using namespace std;
int main()
{
freopen("debug\\in.txt","r",stdin); //输入重定向,输入数据将从in.txt文件中读取
//freopen("debug\\out.txt","w",stdout); //输出重定向,输出数据将保存在out.txt文件中
int a[10];
int i;
for(i=0;i<10;i++)
cin>>a[i];
sort(a,a+10);
//sort(a,a+sizeof(a)/4);//正确,同上
//sort(a,sizeof(a));//错误
for(i=0;i<10;i++)
cout<<a[i]<<‘ ‘;
fclose(stdin);//关闭文件
//fclose(stdout);//关闭文件
return 0;
}