为什么我的气泡搜索只能部分工作



我创建了这个方法来冒泡搜索数组它返回一个"略微"有序的数组。

例如,当我输入:42911125

它返回:24951112

    public static void bubbleSort(int array[]){

        boolean fixed= false;
        while(fixed==false){
            for(int i=0; i<array.length-1; i++){
                int temp;
                fixed=true;
                if (array[i] > array[i+1]){
                    temp= array[i+1];
                    array[i+1]= array[i];
                    array[i]= temp;
                    fixed=false;
                    }
            }
        }    
    }

在 for 循环之前移动fixed=true

public static void bubbleSort(int array[]){
    boolean fixed = false;
    while(!fixed){
        fixed = true;
        for(int i = 0; i < array.length-1; ++i){
            int temp;
            if (array[i] > array[i+1]){
                temp = array[i+1];
                array[i+1] = array[i];
                array[i] = temp;
                fixed = false;
            }   
        }   
    }    
}   

Ryan,我认为如果你移动固定=true;在for循环之外,它可能会解决问题。我还没有测试过这个。

我认为你应该稍微修改一下你的代码。将固定 = true 语句移出 for 循环。此固定标志用于指示 for 循环中是否发生任何交换。出现您的问题是因为 5 小于 11,并且发生了交换,将固定更改为 false,但下一次迭代会覆盖固定为 true。而for循环结束,while检查修复,发现是真的,程序停止。

最新更新