IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 冒泡排序,嵌套的内层for循环为什么要-1? -> 正文阅读

[数据结构与算法]冒泡排序,嵌套的内层for循环为什么要-1?

之前学习数组的排序算法的时候,感觉都理解了,而且还给自己留了本,结果没想到,前两天看到又有些地方迷惑了,是正常现象,还是普遍小白都这样啊?大家帮我往下看看,给我点意见,帮我进步一下呗。

//冒泡算法的概念就不描述了,我刚才又练习了一下,我先把刚出炉的code帖上来

package com.tlz.test1;

import java.util.Arrays;

public class BubbleSoft {
    public static void main(String[] args) {
        int arr[] = Array_Soft();
        //这样写有好处也有坏处

        //好处:参数的提供交给了方法,主函数只负责启动,如果有变动,可以重写方法。

        //缺点:缺点也是有的,方法里会有匿名的创建,在堆内存中开辟了空间了,
        // 好像也不算有垃圾产生吧?因为主方法中声明的栈中的保存信息,也指向了过去。

        //这里在写一个排序方法,采用冒泡排序的算法
        int[] ints = bulleSoft(arr);
        //写到这就不算好了,因为又会在内存里开辟新东东了。

        System.out.println(Arrays.toString(ints));
    }

    private static int[] Array_Soft() {
        return new int[]{0,8,6,4,2,3,1,7,5,9};
    }

    private static int[] bulleSoft(int[] array){
        for (int i = 0; i <= array.length; i++) {
            for (int j = 0; j < array.length-1 -i; j++) {
                if (array[j] > array[j+1]){
                    int temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
        }
        return array;
    }
}

注释里,我写了不懂的点,有没有大佬说明说明,还有就是冒泡算法实现上两层嵌套的问题,
外层循环比较好理解,就是控制排序比较的轮次数,条件值从0开始的话,i 的判断条件就 <= 数组长度,因为数组的下标索引是从0开始计数的。也或者,不设置成<= 就直接 < ,那就在属性长度方法后面 减掉个1就行。
然后是内层循环。

内层循环的话肯定需要-i,因为每轮排序结束之后,都会把当前轮次比较出来的最大值,放到数组元素的最大所以处,(这个根据倒排还是正排的设置),减i,就是正好轮次比较结束之后,下标索引正好指向最大元素上,所以每下一轮都减去每上一轮的最大元素。因为内层循环控制的就是,每个排序比较轮次内的元素嘛。

那-1呢?我的理解是每两个元素进行比较,也就是在每个内轮循环内,都会进行两个元素的控制,毕竟if 判断条件在那写着的嘛。所以每次拿两个比,下次比较的时候就减少一个,如果不减少一个的话,就会ArrayIndexOutOfBoundsException。

还是不太能说到点上,求解一下。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:48:42  更:2022-03-24 00:49:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:01:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码