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

标签 java algorithm sorting bubble-sort

我发现了这种冒泡排序(我研究过的第一种排序),我几乎完全理解它,但我被困在一个地方。

    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 - i - 1)之外,外循环中的“n - 1”还有什么意义?我尝试删除“n -1”并让 count++ 在内部循环中工作,结果是相同的,那么原因是什么?谢谢!

最佳答案

这是因为最大的元素已经在第一次迭代中排序了。

一图胜千言

enter image description here

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

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

关于java - 为什么冒泡排序外循环在n-1处结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61131267/

相关文章:

java - Java App 是否显示使用的版本?

java - 第一个 Android 应用程序 - Google 和 GPS?

c# - 从一组 n 中找出 K 个元素的所有变体

c++ - 如何消除挑战 'Sam and sub-strings' 中与模数相关的错误?

java - 从多个 HashMap 对象创建 SortedSet 的最佳方式

java - Java中多维数组的排序

ios - 按字母顺序排序 [NSDictionary allKeys]

java - 查询 Eclipse 插件中的 jar 条目

algorithm - 为什么 Merge Sort 的 Merge() 函数有条件第二个循环?

java - java中如何检查未初始化的数组引用?