- sort排序:
///#include<bits/stdc++.h>///万能文件头
#include<stdio.h>
///#include <iostream>///用greater需要这个文件头
#include<algorithm>
using namespace std;
bool cmp(int x,int y){
return x>y; ///自定义一个函数实现从大到小排序
}
int main()
{
int num[100];
int n;
while(~scanf("%d",&n))
{
int i;
for(i=0; i<n; i++)
{
scanf("%d",&num[i]);
}
///sort(num,num+n);///默认为从小到大排序
sort(num,num+n,cmp);
///sort(num,num+n,greater<int>());//或者用greater<int>()也可实现从大到小排序
for(int i=0;i<n;i++)
printf("%d ",num[i]);
printf("\n");
}
return 0;
}
- 局部排序(partial_sort):
题目:输入n个数,从小到大输出较大的b个数。
#include<bits/stdc++.h>
int a[10000000];
using namespace std;
int main()
{
int n,b,i;
scanf("%d%d",&n,&b);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
partial_sort(a,a+b,a+n,greater<int>());///只排序a[0]到a[b-1]
for(i=b-1;i>=0;i--)
{
printf("%d ",a[i]);
}
return 0;
}
- 结构体排序:
题目:输入N个坐标,首先按x轴坐标从小到大排序,x轴坐标相同时,按y轴坐标从小到大排序。输出每个坐标对应的序号a。
#include<bits/stdc++.h>
using namespace std;
struct stu{
int a;
int x;
int y;
};
int cmp(const stu &s1,const stu &s2)///为什么要加const???听说不加会错(直接用stu s1,stu s2也可以)
{
if(s1.x==s2.x)
return s1.y<s2.y;
else
return s1.x<s2.x;
}
int main()
{
struct stu zuobiao[100002];
int N,i=1;
scanf("%d",&N);
while(i<=N)
{
scanf("%d%d%d",&zuobiao[i].a,&zuobiao[i].x,&zuobiao[i].y);
i++;
}
sort(zuobiao+1,zuobiao+N+1,cmp);
for(i=1;i<=N;i++){
printf("%d ",zuobiao[i].a);
}
return 0;
}
C++ sort() / partial_sort() / partial_sort_copy排序函数用法
- 排序分数
两个分数比较大小,只需交叉相乘即可,无需另开data储存具体值
struct aaa
{
int a;//分子
int b;//分母
};
int cmp(aaa s1,aaa s2)
{
return s1.a*s2.b<s1.b*s2.a;//从小到大排序
}
struct aaa f[100000];
sort(f,f+n,cmp);
- 使用sort实现对字符串数组的按字典序排序
可以用stl的sort函数可以对sring数组进行字典序排序。
(注意必须是c++中的string类)
string data[5]={"cbf","cac","cba","acd","abd"};
sort(data,data+5);