c - C 中数组中数字的频率计数此代码有效且高效

标签 c arrays frequency

我在 c 中有以下代码,用于计算数组中数字的频率:

#define MAX 10
int flag=0;

void display(int no,int cnt,int visi[]);//function declaration 

int main()
{
    int arr[]={1,1,1,2,3,4,2,2,3,1};//asume any array or we can enter from user
    int visited[MAX];
    int i,j,no,cnt=1;
    clrscr();
    for(i=0;i<10;i++)//loop
    {
        no=arr[i];
        cnt=1;
        for(j=i+1;j<10;j++)
        {
            if(no==arr[j])
                cnt++;
        }
        display(no,cnt,visited);
    }
    return 0;
}

void display(int no,int cnt,int visited[])
{
  int static i;
  int j;

  if(flag==1)
    for(j=0;j<=i;j++)
    {
      if(visited[j]==no)
        goto a;
    }
  i++;
  flag=1;
  printf("\n%d=%d",no,cnt);
  visited[i]=no;
  a:
}

请帮助改进我的代码或建议任何其他技术以提高效率 这个算法是否有效、高效,请反馈。

最佳答案

您可以先通过合并排序对数组进行排序(O(n log n)),然后通过单循环计算数字的频率,如下所示:

int j=0;    
for( i = 0; i < 9; i++ )
{    
    if (arr[i] == arr[i+1]) 
        cnt++;
    else 
    {
        visited[j] = cnt; 
        cnt = 0;
        j++;
    }        
}

关于c - C 中数组中数字的频率计数此代码有效且高效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33473716/

相关文章:

音频采样频率依赖于 channel 吗?

c++ - 如何在多个平台上使用__FILE__和__LINE__ info实现C/C++可变参数记录宏?

c - 在 C 中使用两个名称调用同一个函数的首选方法

python - 使用基于带有索引的 2D 数组的 1 填充 3D numpy 数组

arrays - 数组的变异扩展

C 用值初始化 3D 数组

c++ - 数组 C++ 中最常见的前 5 个

c - 非常简单的 mask

c - 中缀到前缀和后缀的转换

java音频过滤器