C#在数组中找出现次数最多的一个数

思路

我的想法是先把数组变得有序,按照从小到大的顺序排列,得到有序的数组后再去对数组进行内部数据进行次数分析C#在数组中找出现次数最多的一个数_第1张图片
通过相邻两数据的对比可以知道哪个数的频率最高,如果出现两个(或三或四等等)数的频率一样高,那我这种方法只会取最前面的一组数据,比如{1,2,2,3,3,5,5,9},取到的数据是2.但因为我得到的数据是有六位的浮点数float类型,比如1.78569这种类型的。

 private float[] allHeightData=new float[100];  //zy:创建一个数组,用于存放一定量的身高数据

 /// 
    /// zy:将数组里面出现次数最频繁的值取出来
    /// 
    /// 
    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;
        }
```

你可能感兴趣的:(研究)