王道机试指南3.1排序

例题3.1 排序(华中科技大学上机题)

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int main(){
    int n;
    scanf("%d", &n);
    int a[n];
    for(int i = 0; i < n; i++){
        scanf("%d",&a[i]);
    }
    sort(a, a + n);
    for(int i = 0; i < n; i++){
         printf("%d ", a[i]);
    }
    return 0;
}  

例题3.2成绩排序(清华大学上机题)

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;

struct student{
    int a, b;
} stu[100];

bool cmp1(student x, student y){
    if(x.b != y.b) return x.b < y.b;
    else return x.a < y.a;
}

int main(){
    int n;
    scanf("%d", &n);
    for(int i = 0; i < n; i++){
        scanf("%d %d", &stu[i].a, &stu[i].b);
    }
    sort(stu, stu + n, cmp1);
    for(int i = 0; i < n; i++){
        printf("%d %d\n", stu[i].a, stu[i].b);
    }
    return 0;
}  

例题3.3成绩排序(清华大学复试上机)

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
using namespace std;
struct student{
    string name;
    int score;
}stu[500];
bool cmp1(student a, student b){
    return a.score > b.score;
}
bool cmp2(student a, student b){
    return a.score < b.score;
}
int main(){
    int n, flag;
    while(cin >> n >> flag){
        scanf("%d %d", &n, &flag);
        for(int i = 0; i < n; i++){
            cin >> stu[i].name >> stu[i].score;
        }
        if(flag == 0){
            stable_sort(stu, stu + n, cmp1);
        }else{
            stable_sort(stu, stu + n, cmp2);
        }
        for(int i = 0; i < n; i++){
            cout << stu[i].name <<" "<< stu[i].score << endl;
        }
    }
    
    return 0;
}  

习题3.1特殊排序(华中科技大学上机)

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
    int n;
    scanf("%d", &n);
    int a[n];
    for(int i = 0; i < n; i++){
        scanf("%d", &a[i]);
    }
    sort(a, a + n);
    if(n == 1) {
        printf("%d", a[0]);
        printf("-1");
    }
    else{
        printf("%d\n",a[n - 1]);
        for(int i = 0; i < n - 1; i++){
            printf("%d ", a[i]);
        }
    }
    return 0;
}  

习题3.2整数奇偶排序(北京大学复试上机试题)

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
bool cmp1(int a, int b){
    return a > b;
}
int main(){
    int odd[10], even[10], oddnum = 0, evennum = 0;
    int a[10];
    while(cin >> a[0] >> a[1] >> a[2] >> a[3] >> a[4] >> a[5] >> a[6] >> a[7] >> a[8] >> a[9]){
        for(int i = 0; i < 10; i++){
            if(a[i] % 2 == 1) odd[oddnum++] = a[i];
            else even[evennum++] = a[i];
        }
        sort(odd, odd + oddnum, cmp1);
        sort(even, even + evennum);
        for(int i = 0; i < oddnum; i++){
            printf("%d ", odd[i]);
        }
        for(int  i = 0; i < evennum; i++){
            printf("%d ", even[i]);
        }
    }
    
    return 0;
}