有人可以解释冒泡排序中 for 循环背后的逻辑吗?

Could someone explain the logic behind the for loops in bubble sort?

所以我理解冒泡排序的要点,如果它们的顺序不正确就切换对,但我不明白的是 for 循环中限制背后的逻辑(即 i<array.length;j<array.length-1。有人能解释一下为什么它们是这样写的吗???

int temp = 0;

for (int i = 0; i < data.length; i++) {
    for (int j = 1; j < (data.length - i); j++) {
        if (data[j - 1] > data[j]) {
            temp = data[j - 1];
            data[j - 1] = data[j];
            data[j] = temp;
        }
    }
}

乍一看并不明显,但您应该注意:

每次外循环完成时,另一个元素将"bubbled"到达数组顶部。

数组的顶部包含最高的元素 - 这个顶部增长。开始于:

3 1 4 1 5 9 2 6 5 4

一个外循环9冒泡到顶部后

1 3 1 4 5 2 6 5 4 9

在第二个 运行 6 冒泡到顶部后

1 1 3 4 2 5 5 4 6 9

每次外循环 运行 内循环都可以提前一点完成,因为我们知道数组的顶部将被排序。