思路
我的想法是先把数组变得有序,按照从小到大的顺序排列,得到有序的数组后再去对数组进行内部数据进行次数分析
通过相邻两数据的对比可以知道哪个数的频率最高,如果出现两个(或三或四等等)数的频率一样高,那我这种方法只会取最前面的一组数据,比如{1,2,2,3,3,5,5,9},取到的数据是2.但因为我得到的数据是有六位的浮点数float类型,比如1.78569这种类型的。
private float[] allHeightData=new float[100]; //zy:创建一个数组,用于存放一定量的身高数据
/// <summary>
/// zy:将数组里面出现次数最频繁的值取出来
/// </summary>
/// <param name="f"></param>
void MaxCountHeightData(float[] f,out float height)
{
//冒泡一遍,使数组从小到大排序
for (int j = 0; j < f.Length - 1; j++)
{
for (int i = 0; i < f.Length - 1 - j; i++)
{
if (f[i] > f[i + 1])
{
float temp = f[i];
f[i] = f[i+1];
f[i+1] = temp;
}
}
}
//排序完成,数组已经按由小到大顺序排列
//foreach (int number in f)
//{
// Debug.Log(number);
//}
//选择频繁数,不考虑频繁数频率相同的情况
int count = 1, max = 1; //当前次数和最大次数
float num = f[0]; //数组中最大的值
for (int i=1; i < f.Length; ++i)
{
if (f[i] == f[i - 1])
count++;
else
count = 1;
if (max < count)
{
max = count;
num = f[i];
}
}
print(num + ":" + max);
height = num;
}
传递进去的数组我取了小数后两位
allHeightData[count] = float.Parse(userData.ToString("#0.00")); ; //zy
这种方法可以把第一组频率最高的数据抓取出来
2019/09/28更
计数法:
先选定数组第一个数,然后从数组第一个数字开始计数,每和选定的数字相同,计树count就+1,一直遍历完所有的数,count=n(n为自然数)
然后选定第二个数,然后从数组第一个数字开始计数,每和选定的数字相同,计树count就+1,一直遍历完所有的数,count=n(n为自然数)
以此类推。。。
在比较之前先确认选定的数字在之前是否有被选中参与比较过,代码如下:
public static int Search(int[] arrs)
{
int len = arrs.Length;
int max = 0; //出现最多的次数
int num = 0; //当前的数字
List<int> temps = new List<int>(); //a
for (int i = 0; i < len; i++)
{
if (temps.Contains(arrs[i])) continue; //排除之前参与过的数字
int count = 0;
for (int j = 0; j < len; j++)
{
if (arrs[i] == arrs[j])
{
count++;
}
}
if (count > max)
{
max = count;
num = arrs[i];
}
temps.Add(arrs[i]); //a
}
return num;
}
```