排序算法-冒泡算法【GIF图解】初学者小白必看

Chinar blog www.chinar.xin

Unity UGUI 完整系列教程 (Chinar中文图解)

C#排序算法之冒泡排序


本文提供全流程,中文翻译

助力快速掌握 冒泡排序 原理及应用

使有限时间 具备无限可能

Chinar —— 心分享、心创新!

我们的初衷是将一种简单的生活方式带给世人

为初学者节省宝贵的时间,避免采坑!

Chinar 教程效果

在这里插入图片描述



全文高清图片,点击即可放大观看 (很多人竟然不知道)


1

Intro —— 简介


冒泡排序/Bubble Sort,是一种较简单的排序算法。

运行原理:

1. 通过循环遍历要排序的元素序列;
2. 依次比较相邻的两个元素,根据要求条件(大/小),交换两元素位置,从而使最(大/小)元素到达数列顶端;
3. 多次循环,直到没有相邻元素需要交换,表明数列以排序完成。

因数列中的最(大/小)元素,经交换,慢慢"浮动"到数列顶端。
如同气泡由水底上浮到水面的过程一般,因此得名- 《冒泡排序》
举个例子
在这里插入图片描述


2

Demo —— 例子


第一种方案:

按照基本概念,代码设计实现后,发现循环了90次,才将数列排好。
举个例子

for (int j = 0; j < ints.Length; j++) //使以下循环执行多次:ints.Length 次
{
    /*从头到尾,依次访问元素。
      循环一次后,最大元素已经交换到了数列最右边。也就是ints[ints.Length - 1]一定是最大的。
     */
    for (int i = 0; i < ints.Length - 1; i++)
    {
        cycleIndex++;              //计数
        if (ints[i] > ints[i + 1]) //比较两个相邻元素,将两者数据交换
        {
            ints[i] += ints[i + 1];
            ints[i + 1] = ints[i] - ints[i + 1];
            ints[i] = ints[i] - ints[i + 1];
        }
    }
}

执行后

元素值:0
元素值:1
元素值:2
元素值:3
元素值:5
元素值:6
元素值:7
元素值:8
元素值:9
元素值:10
----------------------------------------------
循环次数:90

Chinar 总结,对于新手来讲,冒泡排序会有哪几个难点:

  • 两层循环的意义:外层循环决定本次排序需要 排几轮,有几个数排几轮,内层循环是真正的比较相邻两数的大小

  • 内层循环J的取值范围:数据长度-已排序好数据个数-1为什么要减一:因为从第一个数开始与自身往后一索引数比较,所以不能为 -最后一个数,因此要减一,也就是说当j等于倒数第二个数时,整个数列都比较了一遍


3

Demo2 —— 例子2


第二种方案:

我们浪费的就是每次已经处理过的数据,我们再次进行了循环比较,这样做毫无意义。

举个例子

for (int j = 0; j < ints.Length; j++) //使以下循环执行多次
{
    /*只从头到尾,依次访问元素。
      循环一次后,最大元素已经交换到了数列最右边,也就是最后一个元素此时最大。
      那么下一轮循环比较时,就无需再比较它,浪费一次循环。
      
      我们无需将已经浮动到右端的元素,再做比较。
     
      优化:需要在每一轮循环比较时,跳过我们已经处理过的数据。
      这样 45次循环,即可完成排序

     */
    for (int i = 0; i < ints.Length - j - 1; i++)
    {
        cycleIndex++;              //计数
        if (ints[i] > ints[i + 1]) //比较两个相邻元素,将两者数据交换
        {
            ints[i] += ints[i + 1];
            ints[i            + 1] = ints[i] - ints[i + 1];
            ints[i]                = ints[i] - ints[i + 1];
        }
    }
}

执行后

元素值:0
元素值:1
元素值:2
元素值:3
元素值:5
元素值:6
元素值:7
元素值:8
元素值:9
元素值:10
----------------------------------------------
循环次数:45

在每一轮循环比较时,跳过我们已经处理过的数据。
这样 45次循环,即可完成排序


4

Other —— 其他写法


冒泡排序的多种写法、逻辑(总结)

至此:完!


支持

May Be —— 开发者,总有一天要做的事!


拥有自己的服务器,无需再找攻略

Chinar 提供一站式《零》基础教程

使有限时间 具备无限可能!

先点击领取 —— 阿里全产品优惠券 (享受最低优惠)


Chinar 免费服务器、建站教程全攻略!( Chinar Blog )


Chinar

END

本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com

对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值