3 aa 10 bb 10 cc 20 cc 20 bb 10 aa 10 3 aa 10 bb 10 cc 20 cc 20 aa 10 bb 10 3 aa 10 bb 10 cc 20 aa 10 bb 10 cc 20
Not Stable cc 20 aa 10 bb 10 Right Error cc 20 aa 10 bb 10 题目分析:此题主要考虑的是稳定的排序方法,可以用插入排序,也可以调用STL中的稳定的快速排序,排序之后, 与题目给出的结果进行比较,进行答案输出即可。这里用到插入排序。 AC代码:/** *稳定排序,插入排序是稳定的,也可以用STL中的稳定的快速排序 */ #include<iostream> #include<cstdio> #include<map> #include<string> #include<algorithm> #include<queue> #include<vector> #include<stack> #include<cstdlib> #include<cctype> #include<cstring> #include<cmath> using namespace std; struct Stu{ string name;//分数 int v;//成绩 }; Stu s[303],s1[303]; int main() { int n; while(cin>>n){ for(int i=0;i<n;i++){ cin>>s[i].name>>s[i].v; } for(int i=0;i<n;i++){ cin>>s1[i].name>>s1[i].v; } //插入排序 for(int j=1;j<n;j++){ Stu key=s[j]; int i=j-1; while(i>=0&&s[i].v<key.v){ s[i+1]=s[i]; i--; } s[i+1]=key; } int ok=1;//ok=1记录正确,ok=0记录错误,ok=2记录不稳定 for(int i=0;i<n;i++){ if(s1[i].v!=s[i].v){//排序错误 ok=0; break; } if(s1[i].name!=s[i].name&&s1[i].v==s[i].v){ ok=2; } } if(ok==1) cout<<"Right"<<endl; else if(ok==2) cout<<"Not Stable"<<endl; else if(ok==0) cout<<"Error"<<endl; if(ok!=1) for(int i=0;i<n;i++){ cout<<s[i].name<<" "<<s[i].v<<endl; } } return 0; }
原文地址:http://blog.csdn.net/fool_ran/article/details/42428623