首页 > 解决方案 > 我无法理解冒泡排序中的 while 循环条件

问题描述

首先,我确实了解for循环的作用和if块的作用

我不明白的部分是!isSorted,如果最初将 isSorted 设置为false,是否!isSorted意味着它将 while 循环设置为true

如果是,那么在发生交换并且 isSorted 标记为 之后,循环如何再次进行false

抱歉,如果我不能清楚地表达自己

它有效,但为什么有效?

public class BubbleSorting {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        int[] massiv =  {2,14,8,90,97,44,23,78, 11,1,46, 55, 105,64};
        int buffer;
        boolean isSorted = false;

        while(!isSorted){
            isSorted = true;
            for(int i = 0; i<massiv.length-1; i++){
                if(massiv[i]>massiv[i+1]){
                    buffer = massiv[i];
                    massiv[i] = massiv[i+1];
                    massiv[i+1] = buffer;
                    isSorted = false;
                }
            }
        }
        System.out.println(Arrays.toString(massiv));
    }
}

标签: javawhile-loopbubble-sort

解决方案


FirstisSorted设置为falseSo表示变量的值及其!isSorted的否定。所以它会进入while循环。isSortedtrue

然后在里面首先设置为true。如果发生交换,它将设置为false. 所以直到交换发生isSorted是错误的。那意思!isSorted是真的。因此,直到交换发生,while 循环才会继续。

当交换没有发生时。isSorted会是真的,!isSorted也会是假的。然后它存在while循环


推荐阅读