C语言代码找出数组中重复次数最多的元素,不使用哈希表
时间: 2024-12-09 17:18:41 浏览: 24
在C语言中,可以利用排序和双指针的方式来找到数组中重复次数最多的元素,不需要哈希表。以下是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 函数返回数组中重复次数最多的元素及其计数
int find_most_frequent(int arr[], int n) {
// 如果数组为空或只包含一个元素
if (n == 0 || n == 1)
return arr[0];
// 对数组进行排序
qsort(arr, n, sizeof(int), compare);
int max_count = 1;
int max_freq = arr[0];
int current_count = 1;
for (int i = 1; i < n - 1; i++) {
// 当前元素等于前一个元素,计数加一
if (arr[i] == arr[i - 1])
current_count++;
else { // 当前元素与前一个元素不同
// 更新最大频率和计数
if (current_count > max_count) {
max_count = current_count;
max_freq = arr[i - 1];
}
// 从新开始计数
current_count = 1;
}
}
// 检查最后一个元素是否是最频繁的
if (current_count > max_count) {
max_count = current_count;
max_freq = arr[n - 1];
}
return max_freq;
}
// 自定义比较函数用于qsort
int compare(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
int main() {
int arr[] = {1, 2, 3, 4, 4, 5, 6, 4, 7, 8, 9};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Most frequent element is %d and it appears %d times.\n",
find_most_frequent(arr, n), n - find_most_frequent(arr, n));
return 0;
}
```
这个程序首先对数组进行排序,然后通过两个指针遍历,记录连续相同的元素数量,直到遇到不同的元素为止,更新最大频率和计数。最后检查数组尾部是否有更频繁的元素。
阅读全文