【问题标题】:Radix sort using counting sort使用计数排序的基数排序
【发布时间】:2015-08-31 19:26:54
【问题描述】:

这种基数排序算法使用计数排序作为它所需的稳定排序。当输入 3 个数字且位数较少但排序算法停止工作以获取更高的输入值时,此排序正确。提前致谢

   #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]; 这样的行是不合理的。您可能还需要在某处调用digits 函数。也许像radixsort(a,size,digits(k)) 这样的东西是正确的。
  • 我很抱歉@n.m。下次会记住这一点。非常感谢。很抱歉给您带来不便
  • 循环的移动部分是从数组的末尾移动到开始,这将是不稳定的。永远不会调用数字函数。 for(j=1; ... ) 应该是 for(j = 0; j
  • 我使用了数字功能,为了使其稳定,我从最高索引开始。现在工作正常

标签: c sorting radix-sort counting-sort


【解决方案1】:

循环的移动部分是从数组的末尾移动到开始,这将是不稳定的。永远不会调用数字函数。 for(j=1; ... ) 应该是 for(j = 0; j

【讨论】:

    猜你喜欢
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2016-02-12
    • 2020-12-27
    • 1970-01-01
    相关资源
    最近更新 更多