冒泡排序

  • 格式:ppt
  • 大小:443.50 KB
  • 文档页数:19

下载文档原格式

  / 19
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

我们知道经过第一趟的排序之后, 我们知道经过第一趟的排序之后,最大的一个数 已经排到最后了这样在进行第二趟排序时有没有 必要再对第7 个数据再进行排序呢? 必要再对第7、8个数据再进行排序呢?
参照我们第一趟排序的画法、 参照我们第一趟排序的画法、第二趟排序的流程图 此时只需进行6次 此时只需进行 次。
分析:后面的排序只要 按照这种方法不断进行就 行了。 那么同样的结构要进 行多少次呢?
t:=R[i ] t=R[2] R[i ]:=R[i +1] R[1]=R[2] R[2]= t R[i +1]:= t
+1 i:= i +1

>7 i >7
有没有办法让流程图更 加简洁呢?
是 结束
3、怎样把整个冒泡排序的流 、 程图画出来? 程图画出来?
这样交换数据, 如何交换数据, 会有什么问题? 这样行吗? R[2]>R[3] 否 有没有办法让流程图更 加简洁呢? 不断的这样画下去要画多少个 类似的选择结构?

1.画出第一趟排序的算法流程图: : 用简洁的循环结构进行表示 开始 分析:
是 是 t=R[1] R[i ]>R[i +1] 否 R[1]>R[2] R[1]=R[2] t:=R[i ] t=R[1] R[2]= t R[i ]:=R[i +1] R[1]=R[2] R[2]= t R[i +1]:= t R[1]>R[2]
观察原数据与第一、 观察原数据与第一、二趟排序后的数据 序号 数据 序号 数据 序号 数据 1 49 1 38 1 38 2 38 2 49 2 49 3 65 3 65 3 65 4 97 4 76 4 13 5 76 5 13 5 27 6 13 6 27 6 49 7 27 7 49 7 76 8 49 8 97 8 97
1.画出第一趟排序的算法流程图:假设该数据列为 画出第一趟排序的算法流程图: 画出第一趟排序的算法流程图 R[1], R[2], R[3], R[4], R[5], R[6], R[7], R[8] 开始 分析:
是 t:=R[1] R[1]:=R[2] R[2]:= t 是 t:=R[2] R[2]:=R[3] R[3]:= t R[1]>R[2] 第一步做什么? 否
做一做:
下面我们请几位同学上来讲台为我们演示 一下这种排序的过程,首先按照被叫到的 顺序排列,再用这种方法由低到高进行排 序。
例:用冒泡排序的方法将下面一组无序数组 排成从小到大 { 49,38,65,97,76,13,27,49 } 分析:首先为了方便分析, 分析:首先为了方便分析,我们把所给的数据 先用一个表格列出来,如下: 先用一个表格列出来,如下:
49<65, 65<97, 保持不变 交换位置 交换位置 保持不变97>76, 97>27, 97>13, 交换位置 交换位置 97>49, 49>38,交换位置 经过第一趟排序,把最大的数沉到最底了 第一趟排序,一共进行了多少次比较? ! ? 对比原数据经过第一趟排序,实现了什么目的? 经过第一趟排序,把最大的数沉到最底了! 第一趟排序,一共进行了多少次比较? 对比原数据经过第一趟排序,实现了什么目的
冒泡排序
情景:
1.观察水中的气泡往上冒 的情景,气泡往上冒的时 候有什么特点呢? 2. 第一次上体育课集 队的时候体育老师是怎 么样帮我们按身材的高 低顺序进行排队的?
冒泡原理
冒泡排序和气泡在水中不断往上冒的情况有 些类似。气泡大的 大的(大的数据)在下面,气 下面, 大的 下面 泡小的 小的(小的数据)在上面。 上面。 小的 上面 冒泡排序的基本原理是对存放原始数据的数 组,按从前往后 从前往后的方向进行多次扫描 多次扫描,每次 从前往后 多次扫描 扫描称为一趟。当发现相邻 相邻两个数据的次序 相邻 与排序要求的大小次序不符合 次序不符合时,即将这两 次序不符合 个数据进行互换 进行互换。这样,较小的数据就会逐 进行互换 个向前移动,好象气泡向上浮起一样。
开始
分析:
否 是
开始
i:=1 i:=1
是 R[1]>R[2] R[i ]>R[i +1]
i:=1 i:=1
R[1]>R[2] R[i ]>R[i +1] 否
t:=R[i ] t=R[2] R[i ]:=R[i +1] R[1]=R[2] R[2]= t R[i +1]:= t
t:=R[i ] t=R[2] R[i ]:=R[i +1] R[1]=R[2] R[2]= t R[i +1]:= t
观察原数据与第一、 观察原数据与第一、二趟排序后的数据 序号 数据 序号 数据 序号 数据 1 49 1 38 1 38 2 38 2 49 2 49 3 65 3 65 3 65 4 97 4 76 4 13 5 76 5 13 5 27 6 13 6 27 6 49 7 27 7 49 7 76 8 49 8 97 8 97
i:=1 i:=1

+1 i:= i +1

>7 i >7
是 结束
2、按照这种画法第二趟、第三趟、第四趟排序的流程图 、按照这种画法第二趟、第三趟、 怎样画?怎样把整个冒泡排序的流程图画出来? 怎样画?怎样把整个冒泡排序的流程图画出来?
开始
i:=1 i:=1
是 R[1]>R[2] R[i ]>R[i +1] 否
Байду номын сангаас
原数据和序号 序号 数据 1 49 2 38 3 65 4 97 5 76 6 13 7 27 8 49
第一趟排序的步骤: 第一趟排序的步骤: 的步骤 序号 数据 1 38 49 2 49 38 3 65 4 76 97 5 13 97 76 6 27 97 13 7 49 97 27 8 97 49
那么我们预计最多一共要经过多少次排序呢? 问:为了使这一组无序数组完全按照要求排成 ? 那么我们预计最多一共要经过多少次排序呢 从小到大我们还需不需要再继续排序呢? 从小到大我们还需不需要再继续排序呢?
例题:
下面我们继续考虑,将我们刚才排序的全过程 用算法流程图表示出来。 我们把它分成几步来做,第一步,先把第一 第一 趟的排序用流程图描述出来。 趟的排序用流程图
作业:P128 选做题:
A3
设计一个算法流程图, 设计一个算法流程图,让计算机输出九九 乘法表。 乘法表。
课后思考交流:
在刚才的冒泡排序中是否一定要进行7趟 在刚才的冒泡排序中是否一定要进行 趟? 针对这个问题你有什么好的方法对我们的 算法再进行优化? 算法再进行优化?
+1 i:= i +1

+1 i:= i +1

>7 i >7
是 结束
>6 i >6
是 结束
那么我们可以把整个冒泡排序的流 程图优化成如图所示: 程图优化成如图所示: 分析:

开始
j:=7 j:=7 i:=1 i:=1
R[i ]>R[i +1] 否
t:=R[i ] R[i ]:=R[i +1] R[i +1]:= t
+1 i:= i +1

>j i >j


j:=j j:=j-1 j>0
否 结束
小结:
本节课主要学习了冒泡排序的基本原理 及其算法流程图,冒泡排序是最常用也是最 基本的排序方法,很多其他的排序方法都可 以由它改进而来,比如现在常用的快速排序 法等。双循环是我们本节课刚接触的一种复 杂结构,应用到本节知识的实例很多,比如 :打印九九乘法口诀表、彩票数字选择器, 工作表安排等等。
第一趟排序后的数据和序号 序号 数据 1 38 2 49 3 65 4 76 5 13 6 27 7 49 8 97
第二趟排序的步骤: 第二趟排序的步骤: 的步骤 序号 数据 1 38 2 49 3 65 4 13 76 5 27 76 13 6 49 76 27 7 49 76 8 97
76>49, 交换位置 49<65,65<76, 保持不变 保持不变 交换位置 76<97, 38<49,保持不变 76>13,76>27, 交换位置 保持不变 经过第二趟排序,实现了什么目的? 把第二大的数沉到倒数第二个位置了! 把第二大的数沉到倒数第二个位置了! 经过第二趟排序,实现了什么目的?
分析: 这是一个两重循环 结构

开始
j:=1 j:=1 i:=1 i:=1
R[i ]>R[i +1] 否
t:=R[i ] R[i ]:=R[i +1] R[i +1]:= t
+1 i:= i +1

>7 i >7


j:=j j:=j+1 j>7
是 结束
思考交流:
在我们刚才的算法流程图中,每一趟的排序 我们都进行了7次,是否每一趟的排序都需 要进行7次比较呢? 那么现在请你对我们刚才画出的算法流程图 进行优化,设计出更好的流程图避免不必要 的工作。