标准库函数:stable_sort
#include<bits/stdc++.h>
using namespace std;
#define MXN 310
struct stu{ char n[55]; int s;}s[MXN];
int main(){
int n, vis;
while(scanf("%d", &n) == 1){
for(int i = 1; i <= n; i++) scanf("%s %d", &s[i].n, &s[i].s);
stable_sort(s+1, s+n+1, [](stu x, stu y){ return x.s > y.s;});
vis = 1;
for(int i = 1; i <= n; i++){
scanf("%s %d", &s[0].n, &s[0].s);
if(vis == -1) continue; // 虽已错误,但要把数据读完
if(s[0].s != s[i].s) vis = -1; // 排序错误
else if(strcmp(s[0].n , s[i].n) != 0) vis = 0; // 不稳定
}
if(vis == 1) printf("Right\n");
else{
if(vis == 0) printf("Not Stable\n");
else printf("Error\n");
for(int i = 1; i <= n; i++)
printf("%s %d\n", s[i].n, s[i].s);
}
}
return 0;
}
使用sort,但添加输入序号,并作为排序第2关键字
#include<bits/stdc++.h>
using namespace std;
#define MXN 310
struct stu{ char n[55]; int id, s;}s[MXN]; // id:输入序号
int main(){
int n, vis;
while(scanf("%d", &n) == 1){
for(int i = 1; i <= n; i++)
s[i].id = i, scanf("%s %d", &s[i].n, &s[i].s);
sort(s+1, s+n+1, [](stu x, stu y){
if(x.s == y.s) return x.id < y.id;
return x.s > y.s;
});
vis = 1; // 假设排序正确
for(int i = 1; i <= n; i++){
scanf("%s %d", &s[0].n, &s[0].s);
if(vis == -1) continue; // 虽已错误,但要把数据读完
if(s[0].s != s[i].s) vis = -1; // 排序错误
else if(strcmp(s[0].n , s[i].n) != 0) vis = 0; // 不稳定
}
if(vis == 1) printf("Right\n");
else{
if(vis == 0) printf("Not Stable\n");
else printf("Error\n");
for(int i = 1; i <= n; i++)
printf("%s %d\n", s[i].n, s[i].s);
}
}
return 0;
}