冒泡排序

冒泡排序是一种简单的排序算法,通过重复遍历元素并比较相邻元素来调整顺序。本文详细解释了冒泡排序的原理,通过排序实例展示了排序过程,并提供了Java代码实现。冒泡排序的过程就像小时候比身高,每次冒泡会将最大(或最小)的元素逐步放到正确的位置。文章强调理解冒泡排序的关键在于多实践和思考。
摘要由CSDN通过智能技术生成

前言

从刚开始接触编程语言,会的第一个排序就是冒泡了,但是我这个金鱼记忆,总是会把这个最基础的排序算法“忘”了,也不算忘了吧,就是模模糊糊,似会非会,今天下决心一定要彻底把它融入我的大脑之中,成为技术之路上的奠基石,下面我要开始我的表演了

冒泡排序官方解释

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

为什么叫冒泡排序呢

冒泡嘛,就一个一个的冒出来,一堆数,他们大小顺序乱七八糟,但是经过冒泡排序之后,这些乱七八糟的数字,就会乖乖的从最小到最大(或者从最大到最小)的开始冒出来,1。。。2.。。。3.。。。就这样一个个冒出来

排序实例

文字太干涩,我们拿一串数来实际分析,以:1 8 5 4 7  为例

我们按从小到大的排序出来,那么根据冒泡的定义,第一个冒出来的可以是8(当然也可以是1),我们来看如何通过两两比较将8冒出来

原数组:1 8 5 4 7

第一个位置(1)和下一个位置(8)比较,1更小不交换,数组变成如下形式:1 8 5 4 7

第二个位置(8)和下一个位置(5)比较,8比5大,交换,数组变成如下形式:1 5 8 4 7

第三个位置(8)和下一个位置(4)比较,8比4大,交换,数组变成如下形式:1 5 4 8 7

第四个位置(8)和下一个位置(7)比较,8比7大,交换,数组变成如下形式:1 5 4 7 8

如上第一趟排序完成,8成为最大的冒泡出来并在最后边位置

接下来只需要进行和如上类似的排序就可以把7冒出来冒到8前面,因为第一个位置的1已经冒完了,所以我们只需要从第二个位置开始冒泡就行了

数组:1 5 4 7 8

第二个位置(5)和下一个位置(4)比较,5比4大,交换,数组变成如下形式:1 4 5 7 8

第三个位置(5)和下一个位置(7)比较,5更小,不交换,数组变成如下形式:1 4 5 7 8

第四个位置(7)和下一个位置(8)比较,7更小,不交换,数组变成如下形式:1 4 5 7 8

这就完成了第二趟排序 1  4均是冒泡成功的,由此应该可以发现,每次冒泡都会成功的冒出一位数字,那每次冒泡需比较的次数也会少1

接下来的第三次冒泡我就不实际讲解了:结果肯定是1 4 5  7 8(5 7 8冒成功了)

第四次:1 4 5 7 8  (1 4 5 7冒成功了,也就是1 4 5 7 8了,4要冒出来绝对要和1比较的,这个就不多说了)

 

 

冒泡排序总结:

其实冒泡就像小时候,老妈让我们和一堆人比身高是一个道理,假设你是最高的,原本应该排在最后一个位置,但是开始你站在第1个位置,你先和旁边的小明比,小明没你高,你和他换位置,然后你一直和下一个人比,自然最后你会排到最后一个位置了

        冒第一个数,比较length - 1次

          冒第二个数,比较length-2次

          冒第三个数,比较length-3次,。。。。

 

排序Java代码

根据总结:

         冒第一个数,比较length - 1次

          冒第二个数,比较length-2次

          冒第三个数,比较length-3次,。。。。

两个for循环先实现冒泡的框架,中间一个if实现具体每次冒泡的比较

for (int i = 0; i < list1.length - 1; i++) {   //第一个循环冒最大的数,第二个循环冒第二大的数 
 //比较的次数,从i 开始到length就可以有效的控制比较的次数,i逐渐增加,比较的次数逐渐减小
    for (int j = i; j <list1.length - 1; j++) { 

// 比较相邻的元素,如果前面的数大于后面的数,则交换,这里就是在实现每冒一个数做的那些比较
        if (list1[j] > list1[j+1]) {
            temp = list1[j ];
            list1[j ] = list1[j+1];
            list1[j+1] = temp;
        }
    }
//下面就是简单的输出了
    System.out.print("第"+i+"趟:");
    for (int k = 0; k < list1.length; k++) {
        System.out.print(list1[k]+" ");

        }
    System.out.println();
}

 

 

总结

写完事了,其实冒泡对于初学者理解的唯一方法就是多写,多自己排发现其本质,逐渐你就会对它代码的实现有所了解的,不能一口气吃成大胖子,记得当时学也是很懵,就这样了,笔记完成·····技术是一辈子的事,千万别学一点丢一点

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值