完全自己瞎写,不知道对不对,一个求众数的小函数

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 << " ";
	}
}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐