解题思路:本文的题意是取每个字符串的后六位数字并升序排序。首先用一个整型数组来存储从所有字符串中选择的后六位数字,由于是对整数排序,所以采用了基数排序。注意,把字符型转化为整数是通过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();
}
}
}
}}

京公网安备 11010502036488号