JAVA里的冒泡排序和选择排序代码为啥第二层for循环一个是0一个是i+1
时间: 2024-11-05 19:29:47 浏览: 16
在Java中,冒泡排序和选择排序算法的区别在于它们如何遍历数组以及优化策略。
**冒泡排序**:
冒泡排序通过两层嵌套的`for`循环交替比较相邻元素并交换它们的位置,直到整个序列有序。外层循环控制需要执行多少轮比较(从第一个元素到最后一个),而内层循环则负责相邻元素的比较和交换。由于每一轮外部循环都会将当前未排好序的最大值“浮”到末尾,所以内部循环从0开始逐次检查剩余元素,直到达到倒数第二个元素,即`i`位置。因为最后一个元素在前一轮已经被置于正确位置,下一轮无需再处理它,所以内部循环只进行`i`次。
```java
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
// 交换 arr[j] 和 arr[j + 1]
}
}
```
**选择排序**:
选择排序则是每次从未排序的部分找到最小元素,将其放到已排序部分的末尾。同样有两个`for`循环:外层用于寻找剩余未排序部分的最小元素,这通常是从第一个元素开始,一直到已排序部分结束;内层则是为了在未排序部分找到最小元素。这里,外部循环的条件是`i < arr.length`,而内部循环则是从当前未排序部分的第一个元素开始,即`j = i`,一直找到未排序部分的结尾,也就是`arr.length - 1`。因此,内部循环是`j + 1`,因为初始时`j = i`。
```java
for (int i = 0; i < arr.length; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 将最小元素与 arr[i] 互换位置
}
```
阅读全文