我试着按每个元素的位数从大到小排序数组,这在技术上是可行的,但它似乎也按值排序数组,例如,它应该打印1234 234 700 52,而不是打印1234 700 52 80,因为在原始数组中234在700之前。
public class Sort {
public static void main(String[] args) {
//Initialize array
int [] arr = new int [] {52, 234, 80, 700, 1234};
int temp = 0;
//Displaying elements of original array
System.out.println("Elements of original array: ");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
//Sort the array in descending order
//Math function is used to find length of each element
for (int i = 0; i < arr.length; i++) {
for (int j = i+1; j < arr.length; j++) {
if(Math.log10(arr[i]) + 1 < Math.log10(arr[j]) + 1) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.println();
//Displaying elements of array after sorting
System.out.println("Elements of array sorted in descending order: ");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
1条答案
按热度按时间hrysbysz1#
找到数字长度的最简单方法是将其转换为
String
,然后在其上调用方法length
。但是你也可以用除法来做,下面的方法取一个数,除以
10
的倍数。变量
i
用作被除数,变量j
用作计数器。j
对数的长度进行计数。一旦
number / i
等于零,我们就返回计数器值。有多种方法可以对数组进行排序。下面是一些示例(我使用字符串版本来比较值)。
使用嵌套的for循环
我使用了一个变量
swapIndex
,它是用-1
初始化的。这样我们就可以避免不必要的数组操作。我们取外层for循环中的第一个元素,并在内层for循环中遍历数组的其余部分。只有当数组的其余部分中有一个长度更大的数字时,我们才保存一个新的swapIndex
。如果没有长度更大的数字,swapIndex
仍然是-1
。如果需要,我们只在外部for循环中进行可能的交换(如果swapIndex
已设置)。使用数组.sort()
如果你想使用
Arrays.sort
,你需要把你的数组从原始类型int
转换成Integer
。使用递归方法