我在 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/