sort:头文件 #include<algorithm>
sort 头文件 #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);
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;
}
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.对结构体进行排序
#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)//如果x相等按照y从小到大排序,否则按照x从小到大排序。
{
if(p.x==q.x)
return p.y<q.y;
return p.x<q.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);
}
数组中的数排序:如果默认为从小到大排序可以不用写函数 主函数形式:sort(a,a+个数);
如果是从大到小排序则需写被调函数,如下:
#include<stdio.h>
#include<algorithm>
bool cmp(int a,int b)//不知道为什么返回类型要bool 而不是 int 看网上都这么写的
{return a>b; //a>b是从大往小排 而 a<b是从小往大排
}
主函数中:有被调函数时:sort(a,a+m,cmp);
结构体中:
// 结构体定义
struct Node{
int x;
int y;
int z;
};
Node a[10];
函数的排序规则和数组排序的一样,对应第一个参数和第二个参数。
函数说明:
首先按照x升序排序,
如果x相同了就按照y降序排序,
如果y相同了就按照z升序排序。
bool cmp(const Node &a, const Node &b){
if(a.x!=b.x)
return a.x<b.x;
else if(a.y!=b.y)
return a.y>b.y;
else return a.z<b.z;
}