解题思路:本文的题意是取每个字符串的后六位数字并升序排序。首先用一个整型数组来存储从所有字符串中选择的后六位数字,由于是对整数排序,所以采用了基数排序。注意,把字符型转化为整数是通过Interger.parseInt(str)实现的,str为字符串,因此首先把字符型转化为字符串型。
import java.util.;
public class test2{
public static void main(String arg[]){
Scanner scan=new Scanner(System.in);
int M=scan.nextInt();
List<string> list=new ArrayList<>();
int[] sortlist=new int[M];
int a=0,b=0;
for(int i=0;i<M;i++) {
String str=new String(scan.next());
list.add(str);
}
Stack s=new Stack();
for(int i=0;i<M;i++) {
String str=list.get(i);
a=0;
for(int j=str.length()-1;j>=str.length()-6;j--) {
s.push(str.charAt(j));
}
for(int j=5;j>=0;j--) {
b=Integer.parseInt(s.pop().toString());
a=a+b</string>(int)Math.pow(10, j);
}
sortlist[i]=a;
}
radixSort(sortlist,M,6,10);
for(int i=0;i<M;i++) {
System.out.println(sortlist[i]);
}
}
public static int digit(int data,int m,int r){ /*获取data的第m位数字,该数字为r进制*/ int i,d; if(m==0) return data%r; d=r; for(i=1;i<m;i++){ d=d*r; } return (data/d)%r; } public static void radixSort(int array[],int n,int m,int r){ /*数组array中存放关键字为m位的r进制数,数组大小为n*/ int i,j,k; Queue[] que=new Queue[r]; //定义一个队列数组 for( i=0;i<r;i++){ //初始化队列数组 que[i]=new LinkedList<Integer>(); } for(i=0;i<m;i++){ //进行m趟排序 for(j=0;j<n;j++){ k=digit(array[j], i, r); //取出数组中第j个数的第i位的值 que[k].add(array[j]); //把数组中第j个数放入k对应的队列中 } j=0; for(k=0;k<r;k++){ //把所有队列中的值取出,重新存入数组array中 while(!que[k].isEmpty()){ array[j++]=(int) que[k].remove(); } } } }
}