C语言 给定n个正整数,统计各个数据出现次数,并依据从小到大的顺序排序输出
时间: 2024-11-05 14:32:22 浏览: 49
对任一正整数n,按从小到大的顺序输出所有不超过2^n-1的梅森数-C语言代码
在C语言中,为了给定一组正整数并统计它们出现的次数,可以使用哈希表(如数组或者结构体结合数组的方式)来存储每个数字及其对应的计数,然后遍历数组对元素进行排序。以下是简单的步骤:
1. 定义一个大小适当的数组,比如`int count[100]`,假设所有输入的数字都在0-99之间。
```c
#include <stdio.h>
#define MAX_NUM 100
typedef struct {
int num;
int count;
} Data;
void countAndSort(int nums[], int n) {
// 初始化数组计数为0
for (int i = 0; i < MAX_NUM; i++) {
count[i] = 0;
}
// 遍历输入数组,增加对应数字的计数
for (int i = 0; i < n; i++) {
count[nums[i]]++;
}
// 使用计数数组创建一个新的数组,同时存储数据及其出现次数
Data data[MAX_NUM];
for (int i = 0; i < MAX_NUM; i++) {
if (count[i] > 0) {
data[i].num = i;
data[i].count = count[i];
}
}
// 对新数组按数字从小到大排序
qsort(data, MAX_NUM, sizeof(Data), compareData);
// 输出结果
for (int i = 0; i < MAX_NUM; i++) {
if (data[i].count > 0) {
printf("%d appears %d times.\n", data[i].num, data[i].count);
}
}
}
// 比较Data结构的排序函数
int compareData(const void *a, const void *b) {
return ((const Data *)a)->num - ((const Data *)b)->num;
}
int main() {
int nums[] = {5, 7, 1, 2, 3, 4, 2, 1, 5, 6};
int n = sizeof(nums) / sizeof(nums[0]);
countAndSort(nums, n);
return 0;
}
```
阅读全文