前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【排序算法】冒泡排序

【排序算法】冒泡排序

作者头像
用户11288949
发布2024-09-24 13:31:58
760
发布2024-09-24 13:31:58
举报
文章被收录于专栏:学习

1.基本介绍

冒泡排序的基本思想:重复地走访要排序的数列,一次比较两个数据元素,如果顺序不对则进行交换,并一直重复这样的走访操作,直到没有要交换的数据元素为止。即两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。

2.数据演示

例如: 第0次排序:5  1  6  3  2  9 第1次排序:1  5  3  2  6  9 第2次排序:1  3  2  5  6  9 第3次排序:1  2  3  5  6  9 第4次排序:1  2  3 5  6  9 第5次排序:1  2  3  5  6  9 

在第一次排序中:1小于5交换位置,然后5和6比较,位置不变,然后6和3比较,交换位置,然后6和2比较,交换位置,最后6与9比较,位置不变,最后第一次确定的最大值为9放在最后;

在第二次排序中:1和5位置不变,然后5与3比较,交换位置,接着5与6比较不变,确定第二大的数为6;

在第三次排序中:1和3比较位置不变,3和2比较,交换位置,最后3与5比较不变,确定5为第三大的数字;

在第四次比较中:1和2不变,之后2与3比较位置不变,最后确定3第四大的数;

在第五次比较中:1和2比较,位置不变,所以排序完毕;

即每次交换时,都要将最大的数放在队尾部分,且最后一次交换后,最小的数就不用比较了,所以循环次数为数组长度减去1;

3.算法思路

小编认为,在写代码时,要用两个循环嵌套,内循环进行数字的交换,外循环来确定内循环执行几次,且在内循环中要完成数组元素的交换。

4.代码如下

代码语言:javascript
复制
public class bubble {
    public static void main(String[] args) {
        int temp=0;
        int index=0;
        int arr[]={5,1,6,3,2,9};
        for (int j = 0; j < arr.length-1 ; j++) {
            for (int i = 0; i < arr.length-1 ; i++) {
                if(arr[i]>arr[i+1]){
                    temp=arr[i];
                    arr[i]=arr[i+1];
                    arr[i+1]=temp;
                }
            }
            index++;
            System.out.println("第"+index+"次排序后"+ Arrays.toString(arr));
        }
        System.out.println("排序结束,最终排序为"+Arrays.toString(arr));
    }
}

 在算法中交换两个数值要先用一个变量存储其中一个值,然后在交换后,将变量赋值给另一个即可完成交换。

演示结果:

第1次排序后[1, 5, 3, 2, 6, 9] 第2次排序后[1, 3, 2, 5, 6, 9] 第3次排序后[1, 2, 3, 5, 6, 9] 第4次排序后[1, 2, 3, 5, 6, 9] 第5次排序后[1, 2, 3, 5, 6, 9] 排序结束,最终排序为[1, 2, 3, 5, 6, 9]

5.代码优化

如上图演示的过程,在排序中,数组已经有序,但是仍要按循环规定次数执行,所以小编认为在排序过程中,我们可以加条件实现循环的跳出。

代码如下:

代码语言:javascript
复制
public class bubble {
    public static void main(String[] args) {
        int temp=0;
        int index=0;
        boolean bool=false;
        int arr[]={5,1,6,3,2,9};
        for (int j = 0; j < arr.length-1 ; j++) {
            for (int i = 0; i < arr.length-1 ; i++) {
                if(arr[i]>arr[i+1]){
                    bool=true;
                    temp=arr[i];
                    arr[i]=arr[i+1];
                    arr[i+1]=temp;
                }
            }
            index++;
            if(bool==false){
                break;
            }else {
                bool=false;
            }
            System.out.println("第"+index+"次排序后"+ Arrays.toString(arr));
        }
        System.out.println("排序结束,最终排序为"+Arrays.toString(arr));
    }
}

小编这里加入了if语句,如果发没发生元素的位置交换就直接跳出循环。

演示结果: 第1次排序后[1, 5, 3, 2, 6, 9] 第2次排序后[1, 3, 2, 5, 6, 9] 第3次排序后[1, 2, 3, 5, 6, 9] 排序结束,最终排序为[1, 2, 3, 5, 6, 9]

6.时间演示 

小编在循环前后加入了两端代码,当随机的数有100000个时,排序需要16秒,所以排序时间很长。(当然不能输出元素哈,太多了)

7.总结

冒泡排序的优点是简单易懂,容易实现。但缺点也很明显,就是效率较低,在数据量较大时不适合使用。其平均时间复杂度为 O(n²),空间复杂度为 O(1)。

限于小编能力有限,本篇难免会有一些瑕疵,希望各位uu提出宝贵意见。

 觉得有用就点个赞吧。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.基本介绍
  • 2.数据演示
  • 3.算法思路
  • 4.代码如下
  • 5.代码优化
  • 6.时间演示 
  • 7.总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档