c++實現求眾數及其重數

bwangk發表於2016-09-09

問題:在一個由元素組成的表中,出現次數最多的元素稱為眾數,試寫一個尋找眾數的演算法

方法: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;
}


相關文章