冒泡排序(Java版)

举报
光之梦 发表于 2023/10/26 17:27:20 2023/10/26
【摘要】 我的目标是:用通俗易懂的口语来为大家讲解 Java 的每一个语法知识,让零基础小白也能看懂,并且全部学会并能够熟练运用。

我的个人主页光之梦的博客_云社区-华为云 (huaweicloud.com)

欢迎各位 👍点赞 ⭐收藏 📝评论,如有错误请留言指正,我会第一时间改正。非常感谢!

特别标注本博主将会长期更新c语言的语法知识,初学c语言的朋友们,可以收藏订阅一下我的<C语言基础语法>专栏。关注博主,学习不迷路哦


 冒泡排序

1.1 冒泡排序介绍

相邻的两个数进行比较, 如果第一个比第二个大, 就交换他们两个

也就是说:把第一个元素与第二个进行比较,比出最大的那个(如果第一个大,那就把第二个数与第一个数互换位置,如果第二个大那就位置不变),然后拿第二个去和第三个元素进行比较,以此类推,那么最后的元素应该会是最大的数。

对所有的元素重复以上的步骤,除了最后一个,即需要进行length-1次。

第一次是对n个数进行n-1次比较,进行到最后第n个的一个是最大的;

第二次是对n-1个数进行n-2次比较,进行到最后第n-1个的一个是最大的;

第一轮:可以选出最大值

第一轮 : arr[0]-arr[1] arr[1]-arr[2] arr[2]-arr[3] arr[3]-arr[4] 比较4次



1.2 冒泡排序图例


五个元素只需比较四轮

第一轮 : arr[0]-arr[1] arr[1]-arr[2] arr[2]-arr[3] arr[3]-arr[4] 比较4次

第二轮 : arr[0]-arr[1] arr[1]-arr[2] arr[2]-arr[3] 比较3次

第三轮 : arr[0]-arr[1] arr[1]-arr[2] 比较2次

第四轮 : arr[0]-arr[1] 比较1次



1.3 代码实现思路

外循环来控制比较的轮数,用内循环来控制比较的次数

我们写这个循环嵌套,主要是想实现这个比较的过程。而在比较的过程当中,我需要拿到数组里面的元素来挨个做比较,那么需要拿到数组里的元素,是不是就需要进行遍历数组呀

注:千万不要去背代码,只要你把这个思路记住了什么时候你都能写得出来



1.4 冒泡排序(超详细解析)

public class BubbleSort {
    public static void main(String[] args) {
​
        //冒泡排序算法:相邻的两个数进行比较,如果第一个比第二个大, 就交换他们两个
        int[] arr = {22,55,44,33,11};
​
        //快捷方式:arr.fori
        //arr:数组名
        //外循环:控制比较的轮数
        for (int i = 0; i < arr.length - 1 ; i++) {
            //arr.length 比较0,1,2,3,4    5次
            //但是我们只需要比较4次,所以是 arr.length - 1
​
            //内循环:控制比较的次数
            //-1:避免索引越界 (每次都比较4次)
            //-i:提升代码效率 (比较次数递减)
            for (int j = 0; j < arr.length-1-i; j++) {
                // j = 0 1 2 3 4
                // j = 0        arr[0] arr[1]
                // j = 1        arr[1] arr[2]
                //……
                // j = 3        arr[3] arr[4]
                // j = 4        arr[4] arr[5]
                //这时会出现索引越界的情况,所以 j 不能取到4
                //所以要把内循环的循环次数也要进行-1    所以是:j<arr.length-1
​
                //arr[j] 是在左边,arr[j+1]在右边
                if(arr[j] > arr[j+1]){
                    //三角交换
                    //定义一个临时变量temp用来进行数据的交换
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        //打印输出排序后的数组,检验是否排序正确
        System.out.println(Arrays.toString(arr));
    }
}


冒泡排序·简

public class BubbleSort {
    public static void main(String[] args) {
​
        //冒泡排序算法:相邻的两个数进行比较,如果第一个比第二个大, 就交换他们两个
        int[] arr = {22,55,44,33,11};
​
        //外循环:控制比较的轮数
        for (int i = 0; i < arr.length - 1 ; i++) {
​
            //内循环:控制比较的次数
            //-1:避免索引越界 (每次都比较4次)
            //-i:提升代码效率 (比较次数递减)
            for (int j = 0; j < arr.length-1-i; j++) {
                
                if(arr[j] > arr[j+1]){
                    //三角交换
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        
        System.out.println(Arrays.toString(arr));
    }
}



欢乐的时光总是过得快,又到时间说拜拜了

如果有问题随时都可以来问我,我会随时为您解答!欢迎大家与我一起学习,互相进步。

创作不易,👍 +⭐ +📝(一键三连) 是对博主最大的鼓励与支持哦。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。