首页 > 解决方案 > 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] + " ");
}
}

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

谁能发现我的问题?

标签: java

解决方案


只需删除代码中的 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] + " ");
    }
}

推荐阅读