一、排序部分。
注意,以下是C++文件,.c后缀文件会报错,必须.cpp
升序排序核心部分:
#include<stdio.h>
#include<algorithm>
using namespace std;
int main(){
int n;
int buf[1000];
while(~scanf("%d",&n)){
for (int i=0;i<n;i++){
scanf("%d",&buf[i]);
}
sort(buf,buf+n);
for(int i=0;i<n;i++){
printf("%d ",buf[i]);
}
printf("\n");
}
return 0;
}
降序排序核心部分:
#include<stdio.h>
#include<algorithm>
using namespace std;
bool cmp(int x,int y){ //定义排序规则 cmp第一个参数是 否比第二个大,如果是,排在前面。
return x>y; //当cmp返回值为true 时,即表示cmp函数的第一个参数将会排在第二个参数之前。
}
int main(){
int n;
int buf[1000];
while(~scanf("%d",&n)){
for (int i=0;i<n;i++){
scanf("%d",&buf[i]);
}
sort(buf,buf+n,cmp); //降序排列
for(int i=0;i<n;i++){
printf(“%d ”,buf[i]);
}printf("\n");
}
return 0;
}
练习题
成绩排序
有n 个学生,成绩按降序,成绩相同按名字字母排序,姓名也相同按年龄排序。
输入样例:
3
abc 20 99
bcd 19 97
bef 20 97
输出 样例:
bcd 19 97
bed 20 97
abc 20 99
代码如下:
注:这里用到了结构体数组,所谓结构体数组,是指数组中的每个元素都是一个结构体。在实际应用中,结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。
strcmp函数是C/C++函数,比较两个字符串
设这两个字符串为str1,str2,
若str1=str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
struct E{
char name[100];
int age;
int score;
}stu[1000];
bool cmp(E a,E b){
if(a.score!=b.score) return a.score<b.score;
int temp=strcmp(a.name,b.name);
if(temp!=0) return temp<0;
else return a.age<b.age;
}
int main(){
int n;
while(~scanf("%d",&n)){
for (int i=0;i<n;i++){
scanf("%s%d%d",&stu[i].name,&stu[i].age,&stu[i].score);
}
sort(stu,stu+n,cmp);
for (int i=0;i<n;i++){
printf("%s %d %d\n",stu[i].name,stu[i].age,stu[i].score);
}
}
return 0;
}