zoukankan      html  css  js  c++  java
  • 排序算法之基排

    口诀:清桶入桶计基,倒排乘基循环。

    void RadixSort(int a[],int n)
    {
        int i,j,k=0;    //编号序号
        int count[10];    //桶数
        int temp[n];    //临时存储数组
        int d=maxbit(a,n);    //获取最多有多少位数
        int radix=1;    //基数
    
        for(j=1;j<=d;j++)
        {
            for(i=0;i<10;i++)    count[i]++;    //清桶
            for(i=0;i<n;i++)                          //入桶   
            {
                k=a[i]/radix%10;
                count[k]++;
            }
            for(i=1;i<10;i++)    count[i]+=count[i-1];    //计基,注意从1开始
            for(i=n-1;i>=0;i--)    //倒排,因为入桶的顺序是从0-n;出桶时应该是相反的顺序
            {
                    k=a[i]/radix%10;   
                    temp[--count[k]]=a[i];
            }
            for(i=0;i<n;i++)    a[i]=temp[i];    //排序,将临时数组中的内容取出
            radix*=10;                                    //乘基
        }                                                      //循环
    }    
    
    
    int maxbit(int a[],int n)
    {
        int d=1;
        int radix=10;
        for(int i=0;i<n;i++)
        {
              while(a[i]>=p)
              {
                     p*=10;
                     ++d;
              }
         }
          return d;
        
    

      

  • 相关阅读:
    @atcoder
    @loj
    @AGC037
    @uoj
    @uoj
    @loj
    @loj
    @loj
    @loj
    @loj
  • 原文地址:https://www.cnblogs.com/maxonzou/p/10745855.html
Copyright © 2011-2022 走看看