Java Bubble Sort仅返回部分排序

Nic*_*rro 2 java

我是Java的新手,所以一直试图将一些旧的JS练习翻译成Java.

这是一个泡泡排序(我知道,我知道......),这不起作用:

class BubbleSort{
public static void main(String args[]){

int nums [] = {5, 4, 6, 3, 12, 1};


Boolean swap = true;
while(swap){
    swap = false;
    for(int i = 1; i<nums.length ; i++){
        if (nums[i - 1] > nums[i]){
            int t = nums[i-1];
            nums[i-1] = nums[i];
            nums[i] = t;
            swap = true;
        }else{
            swap = false;
        }
    }
}

System.out.print("Sorted: ");
for(int j=0 ; j<nums.length ; j++)
System.out.print(nums[j] + " ");
}
}
Run Code Online (Sandbox Code Playgroud)

它返回4,3,5,1,6,12 ......所以发生了一些互换,但有些东西正在提前结束.

谁能发现我的问题?

sja*_*han 9

只需删除代码中的else块(如下面的代码示例所示).一旦没有订购,你必须立即进行另一次交换.

在您的代码中,如果最后的项目顺序错误,则只进行另一次交换.如果您的阵列结束太快订购,您的排序也会很快结束.

class BubbleSort{
    public static void main(String args[]){

        int nums [] = {5, 4, 6, 3, 12, 1};

        Boolean swap = true;
        while(swap){
            swap = false;
            for(int i = 1; i<nums.length ; i++){
                if (nums[i - 1] > nums[i]){
                    int t = nums[i-1];
                    nums[i-1] = nums[i];
                    nums[i] = t;
                    swap = true;
                }/* else{
                    swap = false;
                }*/
            }
        }

        System.out.print("Sorted: ");
        for(int j=0 ; j<nums.length ; j++)
            System.out.print(nums[j] + " ");
    }
}
Run Code Online (Sandbox Code Playgroud)