写一个一维数组取众数的C语言函数
时间: 2024-12-16 17:29:06 浏览: 8
mode.m:查找数组的众数。-matlab开发
在C语言中,要编写一个计算一维整型数组中众数的函数,我们可以创建一个简单的函数,遍历数组并使用哈希表(散列表)来跟踪每个元素的出现次数。以下是实现这个功能的一个基本示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义全局变量用于存储最大计数和众数
int max_count = 0;
int mode;
// 使用哈希表存储元素及其出现次数
typedef struct {
int value;
int count;
} ElementCount;
// 函数原型
void findMode(int arr[], int size);
// 用于比较元素计数
int compare_counts(const void *a, const void *b) {
return ((ElementCount *)a)->count - ((ElementCount *)b)->count;
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9};
int n = sizeof(arr) / sizeof(arr[0]);
// 调用函数找到众数
findMode(arr, n);
if (max_count > 1) {
printf("众数有 %d 和 %d\n", arr[mode], arr[n-1-mode]);
} else {
printf("众数是 %d\n", arr[mode]);
}
return 0;
}
// 众数查找函数
void findMode(int arr[], int size) {
ElementCount counts[size];
int i, index;
// 初始化哈希表
for (i = 0; i < size; ++i)
counts[i].value = arr[i], counts[i].count = 1;
// 遍历数组更新计数
for (i = 1; i < size; ++i) {
index = (arr[i] - arr[0]) % size; // 简化哈希查找
counts[index].count++;
}
// 对元素计数排序并找出最大计数
qsort(counts, size, sizeof(ElementCount), compare_counts);
max_count = counts[0].count;
for (i = 1; i < size && counts[i].count == max_count; i++)
if (counts[i].count == max_count)
mode = (arr[0] + i) % size; // 更新众数位置
// 检查是否有两个或更多的众数
if (max_count > 1 && counts[size - 1].count == max_count)
mode = (mode + 1) % size; // 如果最后一个元素也是众数,更新模式
}
```
阅读全文