冒泡排序.ppt
《冒泡排序.ppt》由会员分享,可在线阅读,更多相关《冒泡排序.ppt(28页珍藏版)》请在冰豆网上搜索。
第第99章章排序算法排序算法冒冒泡排序泡排序情景:
观观察水中的气泡往上冒的情景察水中的气泡往上冒的情景,有,有什么特什么特点呢?
点呢?
冒泡原理冒泡原理冒泡排序和气泡在水中不断往上冒的情况有些类似。
气泡大的大的(大的数据)在下面下面,气泡小的小的(小的数据)在上面上面。
冒泡排序的基本冒泡排序的基本原理原理对存放原始数据的数组,按从前往后从前往后的方向进行多多次扫描次扫描,每次扫描称为一趟。
当发现相邻相邻两个数据的次序与排序要求的大小次序不符合次序不符合时,即将这两个数据进行互进行互换换。
这样,较小的数据就会逐个向前移动,好象气泡向上浮起一样。
例:
用冒泡排序的方法将下面一组无序数组例:
用冒泡排序的方法将下面一组无序数组排成从小到排成从小到大的顺序。
大的顺序。
49,38,65,97,76,13,27,4949,38,65,97,76,13,27,49分析:
首先为了方便分析,我们把所给的数据分析:
首先为了方便分析,我们把所给的数据先用一个表格列出来,如下:
先用一个表格列出来,如下:
对比原数据经过第一趟排序,实现了什么目的?
对比原数据经过第一趟排序,实现了什么目的?
对比原数据经过第一趟排序,实现了什么目的?
对比原数据经过第一趟排序,实现了什么目的?
第一趟排序,一共进行了多少次比较?
第一趟排序,一共进行了多少次比较?
第一趟排序,一共进行了多少次比较?
第一趟排序,一共进行了多少次比较?
4949494927272727131313137676767697979797656565653838383849494949数据数据数据数据88887777666655554444333322221111序号序号序号序号4938,交换位置原数据和序号原数据和序号序号序号序号序号11112222333344445555666677778888数据数据数据数据4949494938383838656565659797979776767676131313132727272749494949第一趟排序第一趟排序的步骤:
的步骤:
序号序号序号序号11112222333344445555666677778888数据数据数据数据3838383849494949656565659797979776767676131313132727272749494949序号序号序号序号11112222333344445555666677778888数据数据数据数据3838383849494949656565659797979776767676131313132727272749494949序号序号序号序号11112222333344445555666677778888数据数据数据数据3838383849494949656565659797979776767676131313132727272749494949序号序号序号序号11112222333344445555666677778888数据数据数据数据3838383849494949656565657676767697979797131313132727272749494949序号序号序号序号11112222333344445555666677778888数据数据数据数据3838383849494949656565657676767613131313979797972727272749494949序号序号序号序号11112222333344445555666677778888数据数据数据数据3838383849494949656565657676767613131313272727279797979749494949序号序号序号序号11112222333344445555666677778888数据数据数据数据3838383849494949656565657676767613131313272727274949494997979797经过第一趟排序,把最大的数沉到最底了!
经过第一趟排序,把最大的数沉到最底了!
经过第一趟排序,把最大的数沉到最底了!
经过第一趟排序,把最大的数沉到最底了!
4965,保持不变6576,交换位置9713,交换位置9727,交换位置9749,交换位置经过第二趟排序,实现了什么目的?
经过第二趟排序,实现了什么目的?
经过第二趟排序,实现了什么目的?
经过第二趟排序,实现了什么目的?
经过第二趟排序,把第二大的数沉到倒数第二个位置了经过第二趟排序,把第二大的数沉到倒数第二个位置了经过第二趟排序,把第二大的数沉到倒数第二个位置了经过第二趟排序,把第二大的数沉到倒数第二个位置了!
9797979749494949272727271313131376767676656565654949494938383838数据数据数据数据88887777666655554444333322221111序号序号序号序号3849,保持不变第一趟排序后的数据和序号第一趟排序后的数据和序号第二趟排序第二趟排序的步骤:
的步骤:
序号序号序号序号11112222333344445555666677778888数据数据数据数据38383838494949496565656576767676131313132727272749494949979797974965,保持不变6513,交换位置7627,交换位置7649,交换位置序号序号序号序号11112222333344445555666677778888数据数据数据数据3838383849494949656565657676767613131313272727274949494997979797序号序号序号序号11112222333344445555666677778888数据数据数据数据3838383849494949656565657676767613131313272727274949494997979797序号序号序号序号11112222333344445555666677778888数据数据数据数据3838383849494949656565657676767613131313272727274949494997979797序号序号序号序号11112222333344445555666677778888数据数据数据数据3838383849494949656565651313131376767676272727274949494997979797序号序号序号序号11112222333344445555666677778888数据数据数据数据3838383849494949656565651313131327272727767676764949494997979797序号序号序号序号11112222333344445555666677778888数据数据数据数据383838384949494965656565131313132727272749494949767676769797979776R2是是否否如何交换数据,这样行吗?
R2R3是是否否t:
=R2R2:
=R3R3:
=t不断的这样画下去要画多少个类似的选择结构?
有没有办法让流程图更加简洁呢?
这样交换数据,会有什么问题?
分析:
R1R2R1=R2是是否否t=R1R1=R2R2=t否否是是i:
=i+i:
=i+11结束结束开始开始R1R2R1=R2是是否否t=R1R1=R2R2=ti:
=i:
=11RiiRii+1ii77t:
=RiiRii:
=Rii+1Rii+1:
=t分析:
1.画出第一趟排序的算法流程图:
用简洁的循环结构进行表示用简洁的循环结构进行表示否否是是i:
=i+i:
=i+11结束结束开始开始R1R2R1=R2是是否否t=R2R1=R2R2=ti:
=i:
=11RiiRii+1t:
=RiiRii:
=Rii+1Rii+1:
=tii77分析:
后面的排序只要分析:
后面的排序只要按照这种方法不断进行就按照这种方法不断进行就行了。
行了。
2、按照这种画法第二趟、第三趟、第四趟排序的流程图、按照这种画法第二趟、第三趟、第四趟排序的流程图怎样画?
怎样把整个冒泡排序的流程图画出来?
怎样画?
怎样把整个冒泡排序的流程图画出来?
那么同样的结构要进行多少次呢?
有没有办法让流程图更加简洁呢?
是是3、怎样把整个冒泡排序的流、怎样把整个冒泡排序的流程图画出来?
程图画出来?
开始开始结束结束j7j7j:
=j:
=11否否j:
=j:
=jj11是是ii77否否i:
=i:
=11i:
=i+i:
=i+11是是否否RiiRii+1t:
=RiiRii:
=Rii+1Rii+1:
=t分析:
这是一个两重循环结构课堂思考:
w在我们刚才的算法流程图中,每一趟的排序在我们刚才的算法流程图中,每一趟的排序我们都进行了我们都进行了77次,是否每一趟的排序都需次,是否每一趟的排序都需要进行要进行77次比较呢?
次比较呢?
观察原数据与第一、二趟排序后的数据观察原数据与第一、二趟排序后的数据序号序号序号序号11112222333344445555666677778888数据数据数据数据3838383849494949656565657676767613131313272727274949494997979797序号序号序号序号11112222333344445555666677778888数据数据数据数据3838383849494949656565651313131327272727494949497676767697979797序号序号序号序号11112222333344445555666677778888数据数据数据数据4949494938383838656565659797979776767676131313132727272749494949我我们知道经过第一趟的排序之后,最大的一个数们知道经过第一趟的排序之后,最大的一个数已经排到最后了这样在进行第二趟排序时有没已经排到最后了这样在进行第二趟排序时有没有必要有必要再再对第对第77、88个数据再进行排序呢?
个数据再进行排序呢?
扩展:
1234322964783445冒泡排序也可以从后往前进行,过程演冒泡排序也可以从后往前进行,过程演示如下:
示如下:
小结:
小结:
本本节课主要学习了冒泡排序的节课主要学习了冒泡排序的基本原理基本原理及及其其算法流算法流程图程图。
其中。
其中数组数组和和双双循环循环是我们本是我们本节节课使用较多的一种结构。
课使用较多的一种结构。
应应用到本节知识的实用到本节知识的实例有很例有很多,比如:
多,比如:
打印九九乘法口诀表、彩票数字选打印九九乘法口诀表、彩票数字选择器、工择器、工作表安排等等。
作表安排等等。
课后作业:
在在刚才的冒泡排序中是否一定要进行刚才的冒泡排序中是否一定要进行77趟趟?
针?
针对这