美文网首页
程序排序小记

程序排序小记

作者: JocobZling | 来源:发表于2019-02-24 10:59 被阅读0次

    写在前面:很久没写过c/c++了,准备机试,练习ing

    遇到的问题

    • 怎么循环接收数据?
      while(cin>>num>>way)
    • 怎么处理数据?
            int score[num];
            string name[num];
    
            for(int i=0;i<num;i++){
                cin>>name[i];
                cin>>score[i]; 
            }
            //降序冒泡 
            if(way==0){
                jiangXv(score,name,num);
            }
            //升序 
            if(way==1){
                shengXv(score,name,num);
            }
    
    • 怎么优化?
      看答案的大家很多用了vectors跑得,我试了一下在本地跑不太过,这些的使用都不太了解,之后看明白再继续补充吧~
    • 完整代码
    #include<iostream>
    using namespace std;
    void display(int score[],string name[],int num){
        for(int i=0;i<num;i++){
            cout<<name[i]<<" "<<score[i]<<endl;
        }
    }
    void jiangXv(int score[],string name[],int num){
            int m;
            string n;
            bool change;
            for(int i=num-1,change=true;i>=0&&change;i--){
                change=false;
                for(int j=0;j<i;j++){
                    if(score[j]<score[j+1]){
                        m=score[j];
                        n=name[j];
                        score[j]=score[j+1];
                        score[j+1]=m;
                        name[j]=name[j+1];
                        name[j+1]=n;
                        change=true;        
                    }
                }
            }
            display(score,name,num);
    }
    void shengXv(int score[],string name[],int num){
            int m;
            string n;
            bool change;
            for(int i=num-1,change=true;i>=0&&change;i--){
                change=false;
                for(int j=0;j<i;j++){
                    if(score[j]>score[j+1]){
                        m=score[j];
                        n=name[j];
                        score[j]=score[j+1];
                        score[j+1]=m;
                        name[j]=name[j+1];
                        name[j+1]=n;
                        change=true;        
                    }
                }
            }
            display(score,name,num);
    }
    
    int main()
    {
        int num;
        int way;
        //熟悉c++怎么接收多组数据 
        while(cin>>num>>way){
            int score[num];
            string name[num];
    
            for(int i=0;i<num;i++){
                cin>>name[i];
                cin>>score[i]; 
            }
            //降序冒泡 
            if(way==0){
                jiangXv(score,name,num);
            }
            //升序 
            if(way==1){
                shengXv(score,name,num);
            }
        }
    
        return 0;
    } 
    

    两个冒泡排序真的好蠢噢。。

    相关文章

      网友评论

          本文标题:程序排序小记

          本文链接:https://www.haomeiwen.com/subject/tjepyqtx.html