使用java循环按每个元素中的位数从大到小对数组进行排序
我试图根据每个元素中的位数从大到小对数组进行排序。这在技术上是可行的,但它似乎也按值对数组进行排序。例如,与其打印出1234 700 234 80 52,不如打印出1234 234 700 52 80,因为在原始数组中234在700之前使用java循环按每个元素中的位数从大到小对数组进行排序,java,arrays,loops,sorting,Java,Arrays,Loops,Sorting,我试图根据每个元素中的位数从大到小对数组进行排序。这在技术上是可行的,但它似乎也按值对数组进行排序。例如,与其打印出1234 700 234 80 52,不如打印出1234 234 700 52 80,因为在原始数组中234在700之前 public class Sort { public static void main(String[] args) { //Initialize array int [] arr = n
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] + " ");
}
}
}
公共类排序{
公共静态void main(字符串[]args){
//初始化数组
int[]arr=newint[]{52234,807001234};
内部温度=0;
//显示原始数组的元素
System.out.println(“原始数组的元素:”);
对于(int i=0;i
查找数字长度的最简单方法是将其转换为字符串
,然后对其调用方法length
int number=123;
String numbersString=String.valueOf(number);
int length=numberString.length();//返回3
但你也可以通过除法。以下方法取一个数字并除以10的倍数
- 除以1(我们的长度至少为1)
- 除以10>0(我们的长度至少为2)
- 除以100>0(我们的长度至少为3)
i
用作红利,变量j
用作计数器j
计算数字的长度
只要number/i
等于零,我们就返回计数器值
public int lengthOfNumber(整数){
如果(数字==0){
返回1;
}
对于(inti=1,j=0;i*=10,j++){
如果(数字/i==0){
返回j;
}
}
}
有多种方法可以对数组进行排序。下面是一些示例(我使用字符串版本来比较这些值)
使用嵌套for循环
publicsvoidsortarray(int[]数组){
for(int i=0;i-1){
int temp=数组[i];
数组[i]=数组[swapIndex];
数组[swapIndex]=温度;
}
}
}
我使用了一个变量swapIndex
,它用-1
初始化。这样可以避免不必要的数组操作。
我们取外部for循环中的第一个元素,然后遍历内部for循环中数组的其余部分。如果数组的其余部分中有一个长度更大的数字,我们只保存一个新的swapIndex
。如果没有长度更大的数字,swapIndex
将保留-1
。如果需要(如果设置了swapIndex
),我们只在外部for循环中进行可能的交换
使用Arrays.sort()
如果要使用数组。排序
,则需要将数组从基元类型int
转换为整数
public void sortArray(整数[]数组){
排序(数组,(o1,o2)->{
整数长度1=String.valueOf(o1.length();
整数长度2=String.valueOf(o2).length();
返回长度2。与(长度1)相比;
});
}
使用递归方法
publicsvoidsortarray(int[]数组){
for(int i=0;i
Math.log10()
取决于该值。只需为数组中的每个值打印出Math.log10(arr[i])
。然后你就会明白为什么它是这样排序的。我如何改变代码来反映一个整数而不是小数?我尝试使用Math.ceil()方法进行取整,该方法非常适合此数组,但较长的数组(例如,{394、8060、13、244、11723、10203、31465、1145、3135})不起作用,我添加了一个答案。希望对您有所帮助。我尝试了嵌套for循环的代码,但当我输入394、8060、13、244、11723、10、203、31465、1145、3135时,我得到了3135 31465 394 1145 11723 244 8060 203 10 13作为输出,尽管这不正确