本文主要是介绍数据结构课程设计选做(一)---数字排序(哈希、排序),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2.1.1 题目内容
2.1.1-A [问题描述]
给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。
2.1.1-B [基本要求]
(1)输入格式:
输入的第一行包含一个整数n,表示给定数字的个数。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
(2)输出格式:
输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
2.1.2 算法思想
使用计数排序的思想,创建一个辅助数组b,用于统计每个整数出现的次数。
遍历整数数组a,将每个整数作为索引,将辅助数组b中相应位置的值加1,表示该整数出现了一次。接着,通过排序算法(这里使用的是sort函数)对整数数组a进行排序,以便后续按照出现次数从多到少输出结果。最后,通过遍历辅助数组b,从出现次数最多的整数开始,逐个输出整数及其出现次数。
2.1.3 源代码 [共50行]
#include <iostream>
#include <algorithm>
using namespace std;
typedef struct T_Sort
{int cnt;int x;
}TS;bool sort_rule(TS A, TS B)
{if (A.cnt == B.cnt)return A.x < B.x;return A.cnt > B.cnt;
}
int main()
{int n;TS T[1005];cin >> n;for (int i = 0; i <= 1000; i++){T[i].cnt = 0;T[i].x = i;}while (n--){int x;cin >> x;T[x].cnt++;}sort(T, T + 1001, sort_rule);for (int i = 0; i <= 1000; i++){if (T[i].cnt)cout << T[i].x << " " << T[i].cnt << endl;}return 0;
}
2.1.4 CSP测评结果
正确-100分。
源码地址:GeekclubC/Course-Design-of-Data-Structure: 用C++完成的数据结构课程设计 (github.com)
这篇关于数据结构课程设计选做(一)---数字排序(哈希、排序)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!