首页 > 编程语言 > 详细

【刷题第四天】归并排序二——C++

时间:2020-06-17 10:19:26      阅读:72      评论:0      收藏:0      [点我收藏+]

【题目描述】

给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。

【输入】

第一行为n (0 < n < 20),表示班里的学生数目;

接下来的n行,每行为每个学生的名字和他的成绩, 中间用单个空格隔开。名字只包含字母且长度不超过20,成绩为一个不大于100的非负整数。

【输出】

把成绩单按分数从高到低的顺序进行排序并输出,每行包含名字和分数两项,之间有一个空格。

【输入样例】

4
Kitty 80
Hanmeimei 90
Joey 92
Tim 28

【输出样例】

Joey 92
Hanmeimei 90 
Kitty 80
Tim 28
 1 #include <iostream>
 2 #include <string>                           //C++要用到string字符串时一定要加的头文件!!
 3 using namespace std;
 4 string name[20],na[20];                    
 5 int score[20],sc[20];
 6 void merge(int left,int right) {
 7     if (left >= right) {
 8         return;
 9     }
10 
11     int mid = (left + right) / 2;
12     merge(left, mid);
13     merge(mid + 1, right);
14     
15     int i = left, j = mid + 1, k = left;
16     while (i <= mid&&j <= right) {
17         if (score[i] < score[j]) {
18             na[k] = name[j];
19             sc[k] = score[j];
20             k++; j++;
21         }
22         else if (score[i] > score[j]) {
23             na[k] = name[i];
24             sc[k] = score[i];
25             k++; i++;
26         }
27         else {
28             if (name[i] > name[j]) {
29                 na[k] = name[j];
30                 sc[k] = score[j];
31                 k++; j++;
32             }
33             else {
34                 na[k] = name[i];
35                 sc[k] = score[i];
36                 k++; i++;
37             }
38         }
39     }
40     while (i <= mid) {
41         na[k] = name[i];
42         sc[k] = score[i];
43         k++; i++;
44     }
45     while (j <= right) {
46         na[k] = name[j];
47         sc[k] = score[j];
48         k++; j++;
49     }
50     for (int i = left; i <= right; i++)
51     {
52         name[i] = na[i];
53         score[i] = sc[i];
54     }
55 }
56 int main() {
57     int number;
58     cin >> number;
59     for (int i = 0; i < number; i++)
60     {
61         cin >> name[i];
62         cin >> score[i];
63     }
64     merge(0,number-1);
65     for (int i = 0; i < number; i++)
66     {
67         cout << name[i] << " " << score[i] << endl;
68     }
69     return 0;
70 }

 

【刷题第四天】归并排序二——C++

原文:https://www.cnblogs.com/zymzymzym/p/13150525.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!