冒泡排序引发的思考
对于冒泡排序而言,大多数人都会编写,但是我们对里面的for循环有着多少些思考的过程呢?
下面让我们看看代码?你们觉得这两段代码都是正确的吗?
第一段代码
public static void bubbleSort(int[] arr) {
int i, j, temp, len = arr.length;
for (i = 0; i < len - 1; i++) {
for (j = 0; j < len - 1 - i; j++) {
// 防止j+1越界len-1
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
第二段代码
public static void bubbleSort2(int[] arr) {
int i = 0, j = 0, temp, len = arr.length;
for (; i < len - 1; i++) {
System.out.println("i=" + i);
for (; j < len - 1 - i; j++) {
// 防止j+1越界len-1
System.out.println("j=" + j);
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
你们觉得这两段代码都是能够执行完整的冒泡排序的过程吗?
`**谜题:第一段代码是正确的,第二段代码是错误的**`
- 为什么呢?
可能大家for循环写多了之后就不会在外面就行赋值的一系列的操作了吧
- 在里面赋值和在外面赋值有什么区别呢?
for循环内部定义基本变量类型,每次执行for循环都重新赋值
也就是我上面所写的初始化的过程在外面
- 还有一种就是初始化在里面进行的
// 这种就是初始化在里面进行的每次都需要重新声明变量
// 单层循环,这个写法和上面第二段代码的写法肯定都是没有问题的 0-6 执行7次
for (int i = 0; i < 7; i++) {
}
单层循环,这个写法和上面第二段代码的写法肯定都是没有问题的
多层嵌套循环问题就会明显出现了
如下代码你觉得会执行多少次?
int j = 0;
int count = 0;
for (int i = 0; i < 7; i++) {
for (; j < 4; j++) {
count++;
}
}
System.out.println(count);
如上代码只会执行4次
int里赋值是全局变量,整个程序段都可引用这个变量;for后的赋值是局部变量,只在该大括号里有效
总而言之:记住,for()括号里面的赋值都仅仅只在括号里面生效。
评论区