标签:
用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