我正在制作一个计数排序算法。在第一步中,我用 0 初始化了第二个数组。其次,我计算了第二个 for 循环中元素的频率。在第三个循环中,我尝试对数组进行排序。第三个循环不在代码块中运行。而且它没有给我正确的排序结果。第三个循环有任何问题。因为它将数组更改为 1-1-2-0-2-2-0-1-1 而应该是 0-0-0-1-1-1-1-2-2-2
printf("Hello world!\n");
unsigned m=3;
unsigned n=10;
unsigned x;
unsigned k;
unsigned data[10] = {0, 2, 1, 1, 0, 2, 2, 0, 1, 1};
unsigned *count;
count =(unsigned *)malloc(sizeof(unsigned)*m);
int y=sizeof(data);
for(int i=0;i<m;i++)
{
count[i]=0;
}
for(int j=0;j<n;j++)
{
x=data[j];
count[x]++;
}
for(k=n-1;k>=0;k--)
{
data[count[data[k]]-1]=data[k];
count[data[k]]=count[data[k]]-1;
}
for(int i=0;i<n;i++)
{
printf("%d \n",data[i]);
}
return 0;
}
最佳答案
在这一行
for(k=n-1;k>=0;k--)
k
是无符号
,因此k >= 0
始终为真。当无符号
整数低于零时,其值会“换行”。
此外,您的排序循环不会对任何内容进行排序。不可能,因为没有可比性。您可能想检查一下您的算法。
关于计算数组中的排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55405200/