如何从数组中查找模式

时间:2014-03-21 08:15:15

标签: arrays mode

我一直在尝试使用这个原型来查找阵列的模式,但它没有返回正确的东西,有人可以告诉我我做错了什么。

  int mode(int array[], int size)
  {
      int x;
      int mode = 0;
      int largest = 0;

     for (x = 0; x < size; x++)
     {
         if (array[x] > largest)
         {
             largest = array[x];
             mode = x;
         }
      }
    return mode;
   }

3 个答案:

答案 0 :(得分:0)

首先,如果c ++数组的编号从0开始,那么x中的x应为0。还应检查x与&lt;尺寸。除此之外,代码还不错。

答案 1 :(得分:0)

在你提到的问题中,“用于查找数组的模式的原型”,但是这个程序旨在找到数组中最大数字的位置,因为

mode = x;      // x is the value of i which in-turn is the position of element in the array 

并返回mode的值。因此,显示了从第零个元素位置开始计数的最大元素的位置。

如果你想要一个程序找到模式(最常出现的元素/数字),这里就是

#include <stdio.h>

int mode(int array[], int size);
int main()
{
    int Num[100],size,ret_Val,i;
    clrscr();
    printf("Enter the size of the array\n");
    scanf("%d",&size);
    printf("%d  ",size);
    for(i=0;i<size;i++)
    {
        scanf("%d",&Num[i]);
    }
    ret_Val=mode(Num,size);
    printf("Mode of the array is %d",ret_Val);
    getch();
    return 0;
}

int mode(int array[], int size)
{
    int cntMde = 1;
    int i;
    int cnt = 1;
    int num = array[0];
    int mode = num;

    for ( i=1; i<size; i++)
    {
        if (array[i] == num) 
        {
            cnt++;
        }
        else
        {
            if (cnt > cntMde) 
            {
                cntMde = cnt;
                mode = num;
            }
            cnt = 1;
            num = array[i];
        }
    }
    return mode;
}

输出

Mode of the array is 44

答案 2 :(得分:0)

我已经分析了四种计算阵列模式的方法:

  • 如果数组中的数字范围很小,那么使用计数排序 - O(N)时间,(N)空间但非常有效
  • 哈希表中数组中的索引元素 - O(N)时间,O(N)空间
  • 对数组进行排序,然后计算连续的相等元素 - O(NlogN)时间,O(1)空间
  • 对数组进行部分排序,但跳过小于当前候选的分区--O(NlogN)时间,O(1)空间但比完全排序数组更有效,因为将跳过许多分区

您可以在本文中找到所有四种方法和性能比较的源代码:Finding Mode of an Array