为什么冒泡排序外循环在 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之间交换。
有任何疑问欢迎提问。
我找到了这个冒泡排序(我学习过的第一个排序),我几乎完全理解它,但我卡在了一个地方。
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之间交换。 有任何疑问欢迎提问。