zoukankan      html  css  js  c++  java
  • java中的基数排序算法

    public static void main(String[] args) {
            //定义整型数组
            int[] a = {73,22,93,43,55,14,28,65,39,1,3,55};
            //输出排序前的数组
            for(int i : a)
            {
                System.out.print(i + " ");
            }
            System.out.println();
            //调用基数排序函数
            radixsort(a,5);
            /**
             * 注意这个地方必须要标注数据列中最大数的位数
             * 这里的5表示的是序列里的数字长度最大值为5
             */        
            //输出排序后的数组
            for(int i : a)
            {
                System.out.print(i + " ");
            }
        }
    
        //a是要排序的数组,d是数组中最大的数的位数
        public static void radixsort(int[] a, int d) 
        {
            //count用来计数
            int[] count = new int[a.length];
            //bucket用来当桶
            int[] bucket = new int[a.length];
            //i表示第几位,1是个位,2是十位,。。。
            for(int i=1;i<=d;i++)
            {
                for(int j=0;j<a.length;j++)
                {
                    count[j] = 0;
                }
                //循环统计每个桶中的数据的数量
                for(int j=0;j<a.length;j++)
                {
                    count[getFigure(a[j],i)]++;
                }
                //利用count[j]来确定放置数据的位置
                for(int j=1;j<a.length;j++)
                {
                    count[j] = count[j] + count[j-1];
                }
                //执行完此循环后的count[j]就是第j个桶右边界的位置
                
                
                //利用循环把数据装入桶中,注意是从后往前
                for(int j=a.length-1;j>=0;j--)
                {
                    int k=getFigure(a[j],i);
                    bucket[count[k] - 1] = a[j];
                    count[k]--;
                }
                //将桶中的数据取出,赋值给a
                for(int j=0,k=0;j<a.length;j++,k++)
                {
                    a[j] = bucket[k];
                }
            }
        }
        //此函数返回整型数j的第i位是什么
        public static int getFigure(int j,int i)
        {
            int[] a = {1,10,100,1000,10000,100000};
            return (j/a[i-1])%10;
        }
  • 相关阅读:
    Treap 模板 poj1442&hdu4557
    2016多校第六场题解(hdu5793&hdu5794&hdu5795&hdu5800&hdu5802)
    hdu5785--Interesting(manacher)
    hdu5792--World is Exploding
    HDU5791--Two (DP)
    HDU5781--ATM Mechine(概率dp)
    hdu5773--The All-purpose Zero(LIS变形)
    hdu5769--Substring(后缀数组)
    poj1743--Musical Theme(后缀数组)
    HDU5739-Fantasia(tarjan求割点)
  • 原文地址:https://www.cnblogs.com/suyun0702/p/12673465.html
Copyright © 2011-2022 走看看