为什么冒泡排序外循环在 n-1 处结束?

Why does Bubble Sort outer loop end at n-1?

我找到了这个冒泡排序(我学习过的第一个排序),我几乎完全理解它,但我卡在了一个地方。

    public static int[] bubbleSort(int[] tempArray) { 
    int i, j, temp, n = tempArray.length; 
    boolean swapped; 
    for (i = 0; i < n - 1; i++) { 
        swapped = false; 
        for (j = 0; j < n - i - 1; j++) { 
            if (tempArray[j] > tempArray[j + 1]) { 
                temp = tempArray[j]; 
                tempArray[j] = tempArray[j + 1]; 
                tempArray[j + 1] = temp; 
                swapped = true; 
            } 
        } 
        if (swapped == false) 
            break; 
    }
    return tempArray; 
} 

"n - 1"外循环除了有助于缩短内循环(n - i - 1)之外还有什么意义?我尝试删除 "n -1" 并让 count++ 在内循环中工作,结果是一样的,那么这是什么原因呢?谢谢!

因为最大的元素在第一次迭代时就已经排序了

一图胜千言

图片来自https://en.wikipedia.org/wiki/Bubble_sort

另外不需要最后一个元素,因为冒泡排序就是交换相邻元素,而最后一个元素没有相邻元素。

这是因为冒泡排序作用于相邻元素的交换。 如果外循环一直进行到 n,则在内循环中您不能选择另一个元素。

temp = tempArray[j]; 
tempArray[j] = tempArray[j + 1]; 
tempArray[j + 1] = temp;

这是因为数组的大小是直到n,并且内部循环在j和j+1之间交换。 有任何疑问欢迎提问。