数组排序将一个元素放在错误的位置

Abd*_*shi 5 java sorting

我试图按升序排序数组,我遇到了一个问题.代码对数组进行排序,但它接受最后一个数字并将其放在数组的第一个位置.因此,例如在订购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)

Joh*_*ica 2

有两个主要问题。

一是你交换了一些元素两次。您要始终确保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)