侧边栏壁纸
博主头像
Epoch

Java开发、Python爬虫、微服务、分布式、前端

  • 累计撰写 93 篇文章
  • 累计创建 110 个标签
  • 累计收到 8 条评论

目 录CONTENT

文章目录

冒泡排序引发的思考

Epoch
2021-10-16 / 0 评论 / 0 点赞 / 16,597 阅读 / 607 字 / 正在检测是否收录...

冒泡排序引发的思考

对于冒泡排序而言,大多数人都会编写,但是我们对里面的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()括号里面的赋值都仅仅只在括号里面生效。

0

评论区