1. 程式人生 > >【刷題記錄------按序輸出

【刷題記錄------按序輸出

刷題記錄------按序輸出
1.要輸出的n個數大小在一定範圍內(如分數0-100),可以直接遍歷,按從小到大或從大到小輸出,不需要排序後再輸出,複雜度O(n)
2.若要輸出的數字大小沒有固定範,需要進行排序處理,然後輸出,排序方法很多種,複雜度各不相同
例題如下:

因為成績範圍是固定的,就是0到輸入成績的最大值,所以先找到最大的成績max,正序就是從0到max迴圈,然後在每一次迴圈的時候遍歷一遍輸入陣列,如果和外層迴圈的標號想都就輸出,這樣既可以滿足成績排序也可以滿足先輸入的在前,時間複雜度O(n),逆序同理, PS:第一次做的時候沒有考慮到多組測試用例導致一直提示輸出為空,所以應該使用 1while(cin>>num>>way){} 輸入,否則就會無法輸入第二個測試用例導致輸出為空。
附程式碼:
#include
#include
#include
using namespace std;
struct stu{
string name;
int score;
};
void sort(vector &v,int value){
if(v.empty()||(value!=0&&value!=1)) return;
int max=0;
for(auto p=v.begin();p!=v.end();p++)
{
max=max>(*p).score?max:(*p).score;
}
if(value){
for(int i=0;i<=max;i++){
for(auto p=v.begin();p!=v.end();p++){
if((*p).scorei){
cout<<(*p).name<<" "<<(*p).score<<endl;
}
}
}
}
else if(value

0){
for(int i=max;i>=0;i–){
for(auto p=v.begin();p!=v.end();p++){
if((*p).score==i){
cout<<(*p).name<<" "<<(*p).score<<endl;
}
}
}
}
}
int main()
{
int num,value;
while(cin>>num>>value){
vector v;
for(int i=0;i<num;i++){
stu s;
cin>>s.name>>s.score;
v.push_back(s);
}
sort(v,value);
}
}