问题:在一个由元素组成的表中,出现次数最多的元素称为众数,试写一个寻找众数的算法
方法:1)对输入数据进行排序
2)从每个数字出现的第一个位置开始计数,计算出现的次数,记为count,如果大于最大众数MaxCount则更新MaxCount,并记下索引位置index
应用: KNN算法中求取当前数据所属的分类
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
int* a = new int[n];
for (int i = 0; i < n; i++)
{
cin >> a[i];//输入数据
}
sort(a, a + n);//数据由低到高进行排序
for (int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
cout << endl;
int i = 0;
int MaxCount = 1;
int index = 0;
while (i < n - 1)//遍历
{
int count = 1;
int j ;
for (j = i; j < n - 1; j++)
{
if (a[j] == a[j + 1])//存在连续两个数相等,则众数+1
{
count++;
}
else
{
break;
}
}
if (MaxCount < count)
{
MaxCount = count;//当前最大众数
index = j;//当前众数标记位置
}
++j;
i = j;//位置后移到下一个未出现的数字
}
cout << a[index] << " " << MaxCount << endl;
return 0;
}