我试图按升序排序数组,我遇到了一个问题.代码对数组进行排序,但它接受最后一个数字并将其放在数组的第一个位置.因此,例如在订购2,3,4,1时,输出为4,1,2,3.如何将数字4移到数字3后面?
public class Main {
public static void main(String[] args) {
int[] numbers = {2, 3, 1, 4};
int holder = 0;
for(int i = 0; i < numbers.length; i++){
for(int j = 1; j < numbers.length; j++){
if(numbers[i] < numbers[j]){
holder = numbers[i];
numbers[i] = numbers[j];
numbers[j] = holder;
}
}
}
// prints array
for(int i = 0; i < numbers.length; i++){
System.out.println(numbers[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
4
1
2
3
Run Code Online (Sandbox Code Playgroud)
有两个主要问题。
一是你交换了一些元素两次。您要始终确保i小于 ,j因此numbers[i]位于 的左侧numbers[j]。您的循环工作方式在以后的迭代中j开始时低于i。例如,当i为 2 时,内部循环j从 1 开始。要解决此问题,您始终可以j从高于 1 的位置开始i:
for(int j = i + 1; j < numbers.length; j++) {
Run Code Online (Sandbox Code Playgroud)
如果你解决了这个问题,你会注意到第二个问题:数组是反向排序的!这是因为<比较是向后的。当左边的项目比右边的项目大时,您想要交换项目,而不是当左边的项目比右边的项目更小时。如果它更小,它们的顺序就已经正确了。
if(numbers[i] > numbers[j])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |