• EXCEL排序


    EXCEL排序

    Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
    Total Submission(s) : 32   Accepted Submission(s) : 8

    Font: Times New Roman | Verdana | Georgia

    Font Size:  

    Problem Description

    Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。

    Input

    测试输入包含若干测试用例。每个测试用例的第1行包含两个整数 N (<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号。以下有 N  行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开。当读到 N=0 时,全部输入结束,相应的结果不要输出。

    Output

    对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3  时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。

    Sample Input

    3 1
    000007 James 85
    000010 Amy 90
    000001 Zoe 60
    4 2
    000007 James 85
    000010 Amy 90
    000001 Zoe 60
    000002 James 98
    4 3
    000007 James 85
    000010 Amy 90
    000001 Zoe 60
    000002 James 90
    0 0
    

    Sample Output

    Case 1:
    000001 Zoe 60
    000007 James 85
    000010 Amy 90
    Case 2:
    000010 Amy 90
    000002 James 98
    000007 James 85
    000001 Zoe 60
    Case 3:
    000001 Zoe 60
    000007 James 85
    000002 James 90
    000010 Amy 90

    Source

    浙大计算机研究生复试上机考试-2007年
      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 typedef struct
      5 {
      6     int ID;
      7     char num[10],name[10];
      8 
      9 }USER;
     10 USER Student[100005];
     11 
     12 void quick_sort1(USER s[],int l,int r)
     13 {
     14     if(l<r)
     15     {
     16         int i=l,j=r,ID;
     17         char x[10],name[10];
     18         strcpy(x,s[l].num);
     19         strcpy(name,s[l].name);
     20         ID=s[l].ID;
     21         while (i<j)
     22         {
     23             while(i<j&&strcmp(s[j].num,x)>=0)
     24                 j--;
     25             if(i<j)
     26                 s[i++]=s[j];
     27             while(i<j&&strcmp(s[i].num,x)<=0)
     28                 i++;
     29             if(i<j)
     30                 s[j--]=s[i];
     31         }
     32         strcpy(s[i].num,x);
     33         strcpy(s[i].name,name);
     34         s[i].ID=ID;
     35         quick_sort1(s,l,i-1);
     36         quick_sort1(s,i+1,r);
     37     }
     38 }
     39 
     40 void quick_sort2(USER s[],int l,int r)
     41 {
     42     if(l<r)
     43     {
     44         int i=l,j=r,ID;
     45         char x[10],num[10];
     46         strcpy(num,s[l].num);
     47         strcpy(x,s[l].name);
     48         ID=s[l].ID;
     49         while (i<j)
     50         {
     51             while(i<j&&strcmp(s[j].name,x)>=0)
     52             {
     53                 if(strcmp(s[j].name,x)==0&&strcmp(s[j].num,num)<0)
     54                     break;
     55                 j--;
     56             }
     57             if(i<j)
     58                 s[i++]=s[j];
     59             while(i<j&&strcmp(s[i].name,x)<=0)
     60             {
     61                 if(strcmp(s[i].name,x)==0&&strcmp(s[i].num,num)>0)
     62                     break;
     63                 i++;
     64             }
     65             if(i<j)
     66                 s[j--]=s[i];
     67         }
     68         strcpy(s[i].num,num);
     69         strcpy(s[i].name,x);
     70         s[i].ID=ID;
     71         quick_sort2(s,l,i-1);
     72         quick_sort2(s,i+1,r);
     73     }
     74 }
     75 
     76 void quick_sort3(USER s[],int l,int r)
     77 {
     78     if(l<r)
     79     {
     80         int i=l,j=r,ID;
     81         char name[10],num[10];
     82         strcpy(num,s[i].num);
     83         strcpy(name,s[i].name);
     84         ID=s[i].ID;
     85         while (i<j)
     86         {
     87             while(i<j&&s[j].ID>=ID)
     88             {
     89                 if(s[j].ID==ID&&strcmp(s[j].num,num)<0)
     90                     break;
     91                 j--;
     92             }
     93             if(i<j)
     94                 s[i++]=s[j];
     95             while(i<j&&s[i].ID<=ID)
     96             {
     97                 if(s[i].ID==ID&&strcmp(s[i].num,num)>0)
     98                     break;
     99                 i++;
    100             }
    101             if(i<j)
    102                 s[j--]=s[i];
    103         }
    104         s[i].ID=ID;
    105         strcpy(s[i].name,name);
    106         strcpy(s[i].num,num);
    107         quick_sort3(s,l,i-1);
    108         quick_sort3(s,i+1,r);
    109     }
    110 }
    111 
    112 int main()
    113 {
    114     int N,i,change,times;
    115     times=1;
    116     while(scanf("%d %d",&N,&change),N)
    117     {
    118         for(i=0;i<N;i++)
    119             scanf("%s %s %d",Student[i].num,Student[i].name,&Student[i].ID);
    120         switch(change)
    121         {
    122             case 1:quick_sort1(Student,0,i-1);break;
    123             case 2:quick_sort2(Student,0,i-1);break;
    124             case 3:quick_sort3(Student,0,i-1);break;
    125         }
    126         printf("Case %d:
    ",times++);
    127         for(i=0;i<N;i++)
    128             printf("%s %s %d
    ",Student[i].num,Student[i].name,Student[i].ID);
    129     }
    130     return 0;
    131 }
    View Code

    转载请备注:
    **************************************
    * 作者: Wurq
    * 博客: https://www.cnblogs.com/Wurq/
    * Gitee: https://gitee.com/wurq
    **************************************
  • 相关阅读:
    Coding.net进阶,使用Git管理代码
    经典算法问题
    浅谈三款常用软件
    Coding.net简单使用指南
    湖北宜化总结
    天顺风能经验总结
    Vue中watch的高级用法
    html 锚点三种实现方法
    【机器学习】EM算法详细推导和讲解
    【机器学习】BP神经网络实现手写数字识别
  • 原文地址:https://www.cnblogs.com/Wurq/p/3750318.html
Copyright © 2020-2023  润新知