---------------------
本文来自 语海与冰 的CSDN 博客
---------------------
包含的头文件
#include <algorithm>
+
using namespace std;
1、一维数组排序
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
bool cmp(int a,int b) //如果是double型的,参数改为double a,double b
{
return a<b; //升序
}
int main()
{
int a[100];
int i;
int n;
scanf("%d",&n);
for(i=0;i<=n-1;i++)
scanf("%d",a+i);
sort(a,a+n,cmp); //如果不加被调函数名字,sort(a,a+n)代表默认升序排序
for(i=0;i<=n-1;i++)
printf("%d ",a[i]);
}
2、多个字符串按 字典序 / 字符串长度 排序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
bool cmp(char *a,char *b)
{
return strcmp(a,b)<0; // 按字典序排序
//如果排的是字符串长度 return strlen(a)<strlen(b);
}
int main()
{
char s[100][100];
char *p[100];
int i;
int n;
scanf("%d",&n);
getchar();
for(i=0; i<=n-1; i++)
{
gets(s[i]);
p[i]=s[i];
}
sort(p,p+n,cmp);
for(i=0; i<=n-1; i++)
printf("%s\n",p[i]);
}
3、对 string 类型的字符串排序
(1)、 一维
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<algorithm>
using namespace std;
bool cmp(char a,char b)
{
return a<b;
}
int main()
{
string str;
cin>>str;
sort(str.begin(),str.end(),cmp);
cout<<str<<endl;
}
(2)、二维
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<algorithm>
using namespace std;
bool cmp(string a,string b)
{
return a<b; //如果排的是字符串长度 return a.size()<b.size();
}
int main()
{
string str[100]; // 定义的是二维的
int n;
cin>>n;
for(int i=0; i<n; i++)
cin>>str[i];
sort(str,str+n,cmp);
for(int i=0; i<n; i++)
cout<<str[i]<<endl;
}
4、对结构体排序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node
{
int x;
int y;
}s[100];
bool cmp(struct node p,struct node q)
{
if(p.x==q.x)
return p.y<q.y;
return p.x<q.x;
}
//如果x相等按照y从小到大排序,否则按照x从小到大排序
int main()
{
int i;
int n;
scanf("%d",&n);
for(i=0; i<=n-1; i++)
scanf("%d %d",&s[i].x,&s[i].y);
sort(s,s+n,cmp);
for(i=0; i<=n-1; i++)
printf("%d %d\n",s[i].x,s[i].y);
}