计算数组中的排序问题

标签 c

我正在制作一个计数排序算法。在第一步中,我用 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/

相关文章:

c - 为什么accept()调用使用空的sockaddr结构?

c - 如何修改已传递给 C 函数的指针?

c - 如何在分隔符处分割一行文本

c++ - 为什么我会从 cmath.h 中收到数百个语法错误?

c++ - opengl中glSelectBuffer的返回值

c - Linux C,文件验证不起作用

c - "execv"子进程存在与终止

c - R .call() 接口(interface)和 EXTPTRSXP : Understanding PROTECT/UNPROTECT with externally allocated objects

c - Boyer-Moore-Horspool 实现

c - 简化 C 中的多重相等性检查