怎样用分治法求解众数用C++代码实现
时间: 2024-05-02 20:21:14 浏览: 120
众数是指在一组数据中出现次数最多的数。可以使用分治法来求解众数。
具体步骤如下:
1. 将原始数组分割成两个子数组,分别求出两个子数组的众数。
2. 如果两个子数组的众数相同,则返回该众数。
3. 如果两个子数组的众数不同,则分别计算两个众数在原始数组中的出现次数,返回出现次数多的众数。
以下是用C语言实现的代码:
```c
#include <stdio.h>
int find_majority(int a[], int n) {
if (n == 1) {
return a[0];
}
int m = n / 2;
int left_majority = find_majority(a, m);
int right_majority = find_majority(a + m, n - m);
if (left_majority == right_majority) {
return left_majority;
}
int left_count = 0, right_count = 0;
for (int i = 0; i < n; i++) {
if (a[i] == left_majority) {
left_count++;
} else if (a[i] == right_majority) {
right_count++;
}
}
if (left_count > right_count) {
return left_majority;
} else {
return right_majority;
}
}
int main() {
int a[] = {1, 2, 3, 4, 5, 5, 5, 5, 5, 5, 6, 7};
int n = sizeof(a) / sizeof(a[0]);
int majority = find_majority(a, n);
printf("The majority is %d\n", majority);
return 0;
}
```
运行结果:
```
The majority is 5
```
阅读全文