
用c++求众数
完全自己瞎写,不知道对不对,一个求众数的小函数。
·
完全自己瞎写,不知道对不对,一个求众数的小函数
void getMode(vector<int> v) {
sort(v.begin(), v.end());//将元素进行升序排序
vector<int> m;
int count = 1;//出现次数
int maxCount = 1;//出现最多的次数
int temp = 1;
for (int i = 1; i < v.size(); i++) {//找出元素值最小的众数
if (v.at(i) == v.at(i-1)) {//判断相邻元素是否相等
count++;//相等则出现次数加1
}
else {
count = 1;//不相邻,则该v[i-1]元素只出现一次
}
if (count > maxCount && count != 1)//当前元素的值是否超过之前小的元素出现的次数
{
temp = i + 2;//如果一组数据中出现多个众数,以便可以求这个元素之后的众数,是下一次开始判断元素是否为众数的起始出发点
m.clear();//清空原有的判断的假众数
m.push_back(v[i]);//将该数放入m容器中
maxCount = count;
}
}
if (maxCount == 1)
{
cout << "不存在众数" << endl;
return;
}
//这组数中有多个众数
while (temp < v.size())
{
bool t = false;
count = 1;
for (int i = temp; i < v.size(); i++) {
if (v[i] == v[i - 1]) {
count++;
}
else {
count = 1;
}
if (count == maxCount)
{
t=true;
temp = i+2;
m.push_back( v[i]);
break;
}
}
if (t ==false) break;//说明后面数据中没有众数了,跳出while循环
}
cout << "众数为:";
for (vector<int>::iterator it = m.begin(); it != m.end(); it++)
{
cout<< *it << " ";
}
}
更多推荐
所有评论(0)