码迷,mamicode.com
首页 > 编程语言 > 详细

基数排序模板

时间:2016-05-13 00:54:48      阅读:348      评论:0      收藏:0      [点我收藏+]

标签:

用Tyvj上的快速排序测试了一下,1s AC,数据貌似比较水,前4个点都是1000个数以下(别问我怎么试出来的)

时间复杂度据说是O(nm),貌似还不错


代码实现

package radixSort;

import java.util.Scanner;

public class radixSort {
    static int N=10000;
    public void print(int[] a,int n){
        for(int i=0;i<=n;i++)
            System.out.print(a[i]+" ");
        /*for(int i=n;i>=0;i--)
            System.out.print(a[i]+" ");*/
    }
    public int getNum(int x,int t){
        for(int i=1;i<t;i++)
            x/=10;
        return x%10;
    }
    public void radixSort(int[] a,int begin,int end,int maxBit){
        int[] cnt=new int[10];
        int[] buc=new int[end-begin+1];
        for(int d=1;d<=maxBit;d++){
            for(int i=0;i<10;i++)
                cnt[i]=0;
            for(int i=begin;i<=end;i++)
                cnt[getNum(a[i],d)]++;
            for(int i=1;i<10;i++)
                cnt[i]+=cnt[i-1];
            for(int i=end;i>=begin;i--)
                buc[--cnt[getNum(a[i],d)]]=a[i];
            for(int i=0;i<=end;i++)
                a[i+begin]=buc[i];
        }
    }
    public int[] sort(int[] a,int n){
        int maxBit=0;
        for(int i=0;i<=n;i++){
            int cnt=0,val=a[i];
            while(val>0){
                cnt++;
                val/=10;
            }
            maxBit=Math.max(maxBit,cnt);
        }
        radixSort(a,0,n,maxBit);
        return a;
    }
    public static void main(String args[]){
        Scanner in=new Scanner(System.in);
        int[] a=new int[N];
        int n=in.nextInt();
        for(int i=0;i<n;i++)
            a[i]=in.nextInt();
        radixSort radix =new radixSort();
        radix.sort(a,n-1);
        radix.print(a,n-1);
    }
}

小伙伴们交的时候记得改一下

public class Main

不然会CE的很惨 T_T

还有这题要求是从大到小一行输出,看看注释掉的代码段就知道了


By YOUSIKI

基数排序模板

标签:

原文地址:http://blog.csdn.net/yousiki/article/details/51345787

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!