求一组数中的众数
算法思想:
首先将数组中的数从小到大排序,使用C语言中的内置函数qsort实现,然后依次遍历每个数据,并记录该数据被访问了几次,记录最高次数,并比较两个不同的数出现的次数,最高者即为数组中的众数;
代码实现:
#include<stdio.h>
#include<stdlib.h>
//排序函数调用的函数
int compare(const void* left, const void* right)
{
return *(int*)left - *(int*)right;
}
void get_mode(int nums[],int len,int& mode,int& max_count)
{
qsort(nums, len, sizeof(nums[0]),compare); //从小到大排序
int count = 1, s = nums[0];
for (int i = 1; i < len; i++)
{
if (nums[i] == s)
{
count++;
}
else
{
s = nums[i];
count = 1;
}
if (count > max_count)
{
mode = s;
max_count = count;
}
}
}
int main()
{
int a,b=1;
int nums[] = { 77,2,5,77,23,64,77,77,44,77,2,23,77,45,77,70,23,55,23 };
int len = sizeof(nums) / sizeof(nums[0]);
get_mode(nums,len,a,b);
printf("众数=%d,出现次数=%d\n", a,b);
return 0;
}