需要有关 C 中的二进制基数排序的指导



这是我到目前为止所拥有的,但它没有给我想要的输出。我需要用户将填充的数组通过在基数排序函数中使用按位运算进行排序。此操作的说明指出,我应使用按位运算来提取位,然后将位的值用作存储桶索引。

void radix_sort(unsigned int *array, int num, int bits);
int main()
{   
int bits = 32;
int num = 0;

printf("Enter number of elements: ");
scanf("%d", &num);

unsigned int array[100];

if(num > 100)
{
printf("Number of elements cannot be greater than 100.");
}
else
{
for(int i = 0; i < num; i++)
{   
unsigned int elem;
printf("Enter a number: ");
scanf("%u", &array[i]);
//array[i] = elem;
//printf("%dn", array[i]);
}
}

radix_sort(array, num, bits);
for(int i = 0; i < num; i++)
{
printf("%un", array[i]);
}
return 0;
}

void radix_sort(unsigned int *array, int num, int bits)
{
unsigned int bucket_0[num];
unsigned int bucket_1[num];

for(int d = 0; d < bits; d++)
{   
int count0 = 0;
int count1 = 0;
for(int i = 0; i < num; i++)
{
if( ( array[d] & (1 >> i) ) != 0)
{
bucket_1[i] = array[d];
count1++;
}
else
{
bucket_0[i]= array[d];
count0++;
}
}

int i = 0;
for(int j = 0; j < count0; ++i, ++j)
{
array[i] = bucket_0[j];
//printf("%dn",bucket_0[j]);
}

for(int j = 0; j < count1; ++i, ++j)
{
array[i] = bucket_1[j];
}
}

}

几个明显的错别字错误:

  • 将元素放入存储桶时,应使用bucket_1[count1] = array[i]bucket_0[count0] = array[i],而不是您拥有的内容

  • 您已在多个地方交换了id

  • 当我> 0 时,1 >> i将是 0 - 你想要1 << d

最新更新