Этот алгоритм сортировки счисления использует сортировку подсчета в качестве требуемой в ней стабильной сортировки. Это правильно, если вводится 3 числа с небольшим количеством цифр, но алгоритм сортировки перестает работать для более высоких входных значений. Заранее спасибоСортировка Radix с использованием подсчета сортировки
#include<stdio.h>
int digits(int k)
{
int i=0;
while(k!=0)
{
k=k/10;
i++;
}
return i;
}
void radixsort(int a[],int size,int k)
{
int c[10],b[50],i,j,l,m=10,n=1;
for(l=1;l<=k;l++)
{
if(l==1)
{
m=10;
n=1;
}
else
{
m=m*10;
n=n*10;
}
for(i=0;i<=9;i++)
{
c[i]=0;
}
for(j=1;j<=size;j++)
{
c[(a[j]%m)/n]=c[(a[j]%m)/n]+1;
}
for(i=0;i<=9;i++)
{
c[i]=c[i-1]+c[i];
}
for(j=size;j>=1;j--)
{
b[c[(a[j]%m)/n]]=a[j];
c[(a[j]%m)/n]--;
}
for(i=1;i<=size;i++)
{
a[i]=b[i];
}
}
}
main()
{
int a[50],i,size,k=0;
printf("enter the size of the array\n");
scanf("%d",&size);
printf("enter the numbers of the elements\n");
for(i=1;i<=size;i++)
{
scanf("%d",&a[i]);
if(k<a[i])
k=a[i];
}
radixsort(a,size,k);
for(i=1;i<=size;i++)
{
printf("%d\n",a[i]);
}
}
Прокомментируйте вашу реализацию и дайте значимые имена для переменных. Неразумно ожидать, что кто-либо добровольно просмотрит строки, такие как 'b [c [(a [j]% m)/n]] = a [j];'. Вероятно, вам также нужно вызвать 'цифры 'функция где-нибудь. Возможно, что-то вроде' radixsort (a, size, digits (k)) 'будет правильным. –
я извиняюсь @nm Упомните это в следующий раз. Большое спасибо. Извините за неудобства –
The move часть цикла перемещается от конца массива к началу, t его не будет стабильным. Функция цифр никогда не вызывается. for (j = 1; ...) должно быть для (j = 0; j
rcgldr