我在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:
}
請幫助改善我的代碼或建議其他任何技術的有效性 這個算法是否有效且效率還是不高,請給予反饋。
函數結束處的標籤是編譯時錯誤。 ''void main()'應該是'int main(void)' – mch
A.一些Cr問題(定義'MAX'然後使用'10' - 爲什麼?)B.你正在做'O(n^2)' - 這是你能做的最糟糕的事情(雖然有時候這是必要的)。 –
你對陣列中的數字範圍事先知道嗎?知道這可以顯着提高你的效率(再次,只是有時) –