题目描述
给定一个非空数组(列表) 起元素数据类型为整型 请按照数组元素十进制最低位从小到大进行排序 十进制最低位相同的元素,相对位置保持不变 当数组元素为负值时,十进制最低为等同于去除符号位后对应十进制值最低位
输入
给定一个非空数组(列表) 其元素数据类型为32位有符号整数 数组长度为[1,1000]
输出
排序后的数组
样例输入
1,2,5,-21,22,11,55,-101,42,8,7,32
样例输出
1,-21,11,-101,2,22,42,32,5,55,7,8
我的代码:
个人见解!!!!欢迎讨论!!!!!!!!!
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
String[] split = sc.nextLine().split(","); //输入用逗号取代空格,分割输入
int n = split.length;
//创建两个数组,arr存原始数据,arr2存最低位的绝对值
int[] arr= new int[n];
int[] arr2 = new int[n];
for(int i=0;i<arr.length;i++) {
arr[i]=Integer.parseInt(split[i]);
arr2[i]=Math.abs(Integer.parseInt(split[i]))%10;
}
//比较arr2的大小,给arr2升序排序,同时升序排序arr(只比较arr2,同时排序arr和arr2)
for(int j=0;j<arr2.length;j++) {
for(int i=0;i<arr2.length-1;i++) {
if(arr2[i]>arr2[i+1]) {
int temp;
temp=arr2[i];
arr2[i]=arr2[i+1];
arr2[i+1]=temp;
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
//输出
for(int j=0;j<arr.length;j++) {
if(j==arr.length-1) {
System.out.print(arr[j]);
}else{
System.out.print(arr[j]+",");
}
}
}
}
}