冒泡排序算法课件
合集下载
课件-冒泡排序算法的数组实现.ppt

•
for j=5 to 3 step -1
•
if R(j) < R(j-1) then 交换R(j) 和R(j-1) 的值
• 第三次冒泡排序〔i =3 ), j从5到4
•
for j=5 to 4 step -1
•
if R(j) < R(j-1) then 交换R(j) 和R(j-1) 的值
• 第四次冒泡排序〔i =4 ), j从5到5
5 3 3 3 33 3 3 3 44
3 5 5 5 55 5 5 5 55
算法分析
• 第一次冒泡排序〔i =1 ), j从5到2
•
for j=5 to 2 step -1
•
if R(j) < R(j-1) then 交换R(j) 和R(j-1) 的值
• 第二次冒泡排序〔i =2 ), j从5到3
•
for j=5 to 5 step -1
•
if R(j) < R(j-1) then 交换R(j) 和R(j-1) 的值
程序代码
当i从1 到4变化时 每次j从5到 i+1 R( j) < R( j-1),那么交换它们
• For i=1 to o i+1 step -1 ’每次j从5到 i+1
•
本学期考试成绩都出来了,对于总分前
三名发放奖学金。我们需要设计程序,对全
班同学成绩按总分排序。
那我们应该如何做?要解决这个问题, 就让我们一起来学习排序算法。
排序问题引入
• 排序:为了将一组杂乱的数据变成一组有序 的数据
冒泡法排序〔Bubble sort〕
• “冒泡法排序〞又叫“起泡法排序〞,是一 种比较简单、易懂的交换排序方法,它通过 相邻元素进行比较和交换,逐步将一个无序 序列排列为一个有序序列。
冒泡排序PPT课件

16
小结:
本节课主要学习了冒泡排序的基本原理及 其算法流程图。其中数组和双循环是我们本 节课使用较多的一种结构。
应用到本节知识的实例有很多,比如:打 印九九乘法口诀表、彩票数字选择器、工作 表安排等等。
17
课后作业:
在刚才的冒泡排序中是否一定要进行7趟? 针对这个问题你有什么好的方法对我们的 算法再进行优化?
第二趟排序的步骤: 序号 1 2 3 4 5 6 7 8 数据 38 49 65 7163 172367 274769 4796 97
38<494,保9<持65不,6保变5<持7不67,6变保>1持3不,7交6变>换27位, 置交76换7>64位<99置,7交, 保换持位不置变 经过第二趟排序,实把现第了二什大么的目数的沉?到倒数第二个位置了!
(2)冒泡的流程图 主要采用讲解法
(3)冒泡的算法优化问题 主要采用课堂讨论和提问的方式
(4)冒泡的知识点扩展 采用课堂演示的方法
(5)小结
26
3、作业布置
在讲解的冒泡排序算法的基础上,思考进一 步的优化算法。加深学生对知识的掌握和理解。
27
28
序号 1 2 3 4 5 6 7 8 数据 38 49 65 13 27 49 76 97
我们知道经过第一趟的排序之后,最大的一个数 已经排到最后了这样在进行第二趟排序时有没有必要 再对第7、8个数据再进行排序呢?
15
扩展:
冒泡排序也可以从后往前进行,过程演 示如下:
45 34 78 12 34’ 32 29 64
分析:
是
开始 R[1]>R[2]
第一步做什么? 否
t:=R[1] R[1]:=R[2]
小结:
本节课主要学习了冒泡排序的基本原理及 其算法流程图。其中数组和双循环是我们本 节课使用较多的一种结构。
应用到本节知识的实例有很多,比如:打 印九九乘法口诀表、彩票数字选择器、工作 表安排等等。
17
课后作业:
在刚才的冒泡排序中是否一定要进行7趟? 针对这个问题你有什么好的方法对我们的 算法再进行优化?
第二趟排序的步骤: 序号 1 2 3 4 5 6 7 8 数据 38 49 65 7163 172367 274769 4796 97
38<494,保9<持65不,6保变5<持7不67,6变保>1持3不,7交6变>换27位, 置交76换7>64位<99置,7交, 保换持位不置变 经过第二趟排序,实把现第了二什大么的目数的沉?到倒数第二个位置了!
(2)冒泡的流程图 主要采用讲解法
(3)冒泡的算法优化问题 主要采用课堂讨论和提问的方式
(4)冒泡的知识点扩展 采用课堂演示的方法
(5)小结
26
3、作业布置
在讲解的冒泡排序算法的基础上,思考进一 步的优化算法。加深学生对知识的掌握和理解。
27
28
序号 1 2 3 4 5 6 7 8 数据 38 49 65 13 27 49 76 97
我们知道经过第一趟的排序之后,最大的一个数 已经排到最后了这样在进行第二趟排序时有没有必要 再对第7、8个数据再进行排序呢?
15
扩展:
冒泡排序也可以从后往前进行,过程演 示如下:
45 34 78 12 34’ 32 29 64
分析:
是
开始 R[1]>R[2]
第一步做什么? 否
t:=R[1] R[1]:=R[2]
冒泡排序 ppt课件

稳定排序
冒泡排序是一种稳定的排序算法 ,相同元素的相对位置不会改变
。
冒泡排序的缺点
时间复杂度高
冒泡排序的时间复杂度为O(n^2),在数据量大时 效率较低。
易受数据分布影响
如果待排序数据集已经部分有序,冒泡排序的性 能会受到影响。
交换操作频繁
冒泡排序需要多次遍历数据,进行大量的交换操 作。
其他排序算法的比较
01
选择排序
选择排序的时间复杂度也是O(n^2),但它的空间复杂度为O(1),且在
数据量较大时比冒泡排序略快。
02
插入排序
插入排序的时间复杂度同样是O(n^2),但它的空间复杂度也是O(1)。
在数据量较小或部分有序的情况下,插入排序的性能优于冒泡排序。
03
快速排序
快速排序是一种分治算法,其平均时间复杂度为O(nlogn),远优于冒
冒泡排序 PPT 课件
目录
• 冒泡排序简介 • 冒泡排序算法实现 • 冒泡排序的时间复杂度分析 • 冒泡排序的优缺点比较 • 冒泡排序的应用实例 • 总结与展望
01 冒泡排序简介
什么是冒泡排序
冒泡排序是一种简单的排序算法,通过重复地遍历待排序的 序列,比较相邻的两个元素,若它们的顺序错误则交换它们 ,直到没有需要交换的元素为止。
终实现数组的有序排列。由于其算法简单且稳定,冒泡排序在某些场景下是高效的。
冒泡排序在字符串匹配中的应用
总结词
基础、适用
VS
详细描述
在字符串匹配中,冒泡排序可以作为算法 的一部分,用于对字符数组进行排序。通 过将待匹配的字符串与模式串中的字符进 行比较和交换,冒泡排序可以帮助算法更 快地找到匹配项或排除不可能的匹配。尽 管冒泡排序在字符串匹配中的效率不是最 高,但由于其简单易实现,仍被广泛使用 。
冒泡排序的算法详解 ppt课件

ppt课件
7
序号 1 2 3 4 5 6 7 8 数据 38 49 65 76 13 97 27 49
97>27, 交换位 置 序号 1 2 3 4 5 6 7 8 数据 38 49 65 76 13 27 97 49
ppt课件
8
序号 1 2 3 4 5 6 7 8 数据 38 49 65 76 13 27 97 49
//用冒泡法对这个数作升序排序 for (i = 0; i <10;i++ )// 元素的个数。
{
for (j = 0; j <9; j++)// 相邻的2个数比较,每次都要比较9次 。 要比较的次数比元素个数少1次 {
if (a[j] > a[j + 1]) {
temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } }
ppt课件
10
序号 1 2 3 4 5 6 7 8 数据 38 49 65 76 13 27 49 97
49<65, 保持不变
序号 1 2 3 4 5 6 7 8 数据 38 49 65 76 13 27 49 97
ppt课件
11
序 号
1
数 据
38
78 49 65 76 13 27 49 97
冒牌排序详解:
// 编一个程序,从键盘输入10个实数,存入一个数组,用冒泡法对这个数作升序排序。
/*冒泡排序算法的运作如下: 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是
冒泡排序 课件 2022—2023学年浙教版高中信息技术选修1

在分组合作探究排序问题中,通过协作、共享,体验知识的社会性建构,实现 信息价值的最大化。养成在未来社会中自觉、主动、合理应用计算思维解决问 题的习惯。
教材学情分析
教学目标
教学重难点 教学方法
教学准备
教学过程
教学重点、难点 重点:了解生活问题如何抽象为算法并解决的一般过程; 难点:了解冒泡排序原理,及算法优化的基本方法。
数组s中的每一个格子中都可存放一个相 同类型的数据,这样可方便读和写。如: print s(1) s(3)=10 if s(1)>s(2) then print s(1) else print s2(2) end if
课程导入 探究分析 案例验证 发散思维 课程总结
教材学情分析
(8分钟)
算法第3步:算法思考
教材学情分析
教学目标
教学重难点 教学方法
教学准备
教学过程
教学目标
掌握冒泡排序原理,体会算法及程序在生活中的作用;通过层层优化,激发学 生学习热情。
通过 “排座位”问题创设情境,将生活问题数字化,用数组数据结构表达数据 之间的逻辑关系,将学生的思维发展融入到运用数字化工具解决问题和形成良 好的计算思维过程中。
教学过程 课程导入 探究分析 案例验证 发散思维 课程总结
教材学情分析
教学目标
(3分钟)
算法第1步:生活问题数字化
教学重难点 教学方法
教学准备
教学过程 课程导入 探究分析
案例验证
发散思维
“ ” 对数字173、175、168、170、180、177、165、185进行按照从 小到大进行排序。
课程总结
教学目标
教学重难点 教学方法
教学准备
1、【验证结果】打开《冒泡排序演示》程序,输入173 175 168 170 180 177 165 185数据;
教材学情分析
教学目标
教学重难点 教学方法
教学准备
教学过程
教学重点、难点 重点:了解生活问题如何抽象为算法并解决的一般过程; 难点:了解冒泡排序原理,及算法优化的基本方法。
数组s中的每一个格子中都可存放一个相 同类型的数据,这样可方便读和写。如: print s(1) s(3)=10 if s(1)>s(2) then print s(1) else print s2(2) end if
课程导入 探究分析 案例验证 发散思维 课程总结
教材学情分析
(8分钟)
算法第3步:算法思考
教材学情分析
教学目标
教学重难点 教学方法
教学准备
教学过程
教学目标
掌握冒泡排序原理,体会算法及程序在生活中的作用;通过层层优化,激发学 生学习热情。
通过 “排座位”问题创设情境,将生活问题数字化,用数组数据结构表达数据 之间的逻辑关系,将学生的思维发展融入到运用数字化工具解决问题和形成良 好的计算思维过程中。
教学过程 课程导入 探究分析 案例验证 发散思维 课程总结
教材学情分析
教学目标
(3分钟)
算法第1步:生活问题数字化
教学重难点 教学方法
教学准备
教学过程 课程导入 探究分析
案例验证
发散思维
“ ” 对数字173、175、168、170、180、177、165、185进行按照从 小到大进行排序。
课程总结
教学目标
教学重难点 教学方法
教学准备
1、【验证结果】打开《冒泡排序演示》程序,输入173 175 168 170 180 177 165 185数据;
选修一高中信息技术-冒泡排序 课件

√C、当比较的两个数逆序时, 交换顺序
D、只能比较数据
二、代码实现
for i in range(len(list)-1): for j in range(len(list) - i - 1):
if list[j] > list[j + 1]: list[j],
list[j+1] = list[j+1], list[j]
高中信息技术
数据排序 —冒泡排序
冒泡排序
目录
01 课 前 回 顾 02 代 码 实 现 03 习 题 演 练 04 课 堂 总 结
上 节 课 学 了 什 么
?
一、课、 前回顾
1、冒泡排序的定义
从前到后(即从下标较小的 元素开始)依次比较相邻元 素的值,若发现逆序则交换 位置,使值较大的元素逐渐
从前移向后部。
2、冒泡排序的过程
从小到大排序
第一次排序
7&g轮排序以后,最大 的数就会浮到最右面; 第二轮排序时,只排到 导数第二个...以此排完。
7<22
正序,保 持不变
同之前规律
第一次排 完
第二次排 完
第二次排序
练一练
下面关于冒泡排序说法正确的是()
A、只能从小到大排序
B、可以一次比较三个以上的元素
解题步骤一
If a(j)>a(j+1)
解题步骤二
50,31,18,42,37,23
18,31,23,37,42, 50
从小到大排序,现在确定最大
i=1 i=3
31,18,42,37,23,50 i=2
18,31,37,23,42, 50
排除A
四、课堂总结
01 什 么 是 冒 泡 排 序
动画演示(冒泡法)PPT课件

{t=s[j];s[j]=s[j+1];s[j+1]=t;}
printf(“%d %d %d %d %d \n”,s[0],
s[1], s[2], s[3], s[4]); }
s[0] s[1] s[2] s[3] s[4]
23795
16
冒泡法演示(升序) 下一步
j=4时,4<4 为假,循环
结束,该轮
变量与变量的 值
程序段: #include<stdio.h>
的大小,将 较大数存入
s[1]
main()
n5 i0
{ int s[10]={2,9,3,7,5}, n=5, i,j,t;
for(i=0;i<n-1;i++) for(j=0;j<n-1-i;j++)
值为4
if(s[j]>s[j+1])
j0
变量与变量的 值
程序段: #include<stdio.h>
的大小,将 较大数存入
s[2]
main()
n5 i0
{ int s[10]={2,9,3,7,5}, n=5, i,j,t;
for(i=0;i<n-1;i++) for(j=0;j<n-1-i;j++)
值为4
if(s[j]>s[j+1])
j1
{t=s[j];s[j]=s[j+1];s[j+1]=t;}
printf(“%d %d %d %d %d \n”,s[0],
s[1], s[2], s[3], s[4]); }
s[0] s[1] s[2] s[3] s[4]
动画演示C语言冒泡排序算法精品PPT课件(绝对精品)

第五趟比较
第五趟比较结束找到第五大数5,两两比较1次。
提出问题 填流程图
5 >2
67 89
点击开始
语言程序设计——排序算法
情景导入 冒泡排序 编写程序 调试程序
算法思想 动画演示 提出问题 填流程图
结论
6个数据排序,需要比较5趟,每趟比 较的次数分别是5、4、3、2、1次。
那么N个数据排序,又该比较几趟,每 趟比较几次呢?
点击开始
语言程序设计——排序算法
情景导入 冒泡排序 编写程序 调试程序
算法思想 动画演示
第二趟比较
第二趟比较结束找到第二大数8,两两比较4次。
提出问题 填流程图
5 <7 >6 <8 >2 9
点击开始
语言程序设计——排序算法
情景导入 冒泡排序 编写程序 调试程序
算法思想 动画演示
第三趟比较
第三趟比较结束找到第三大数7,两两比较3次。
语言程序设计——排序算法
情景导入 冒泡排序 编写程序 调试程序
算法思想 动画演示 提出问题 填流程图
初始数据
587692
语言程序设计——排序算法
情景导入 冒泡排序 编写程序 调试程序
ห้องสมุดไป่ตู้
算法思想 动画演示
第一趟比较
第一趟比较结束找到最大数9,两两比较5次。
< > > < > 提出问题
填流程图
5 8 78 6 9 2
提出问题 填流程图
5 <6 <7 >2
89
点击开始
语言程序设计——排序算法
情景导入 冒泡排序 编写程序 调试程序
算法思想 动画演示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
冒泡排序算法
株洲市第二中学 信息技术组
刘辉琴 杜新宇
活动: 按照计算机的工作方式将下面一组无序的 将下面一组无序的数据从小到大排列。 数据从小到大排列。 { 49,38,65,97,76,13,27,49 } 数据如何存储? ——一维数组
定义一维数组: int r[8]; 数组元素为: r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7]
冒泡排序 选择排序
插入排序
……
小结:
1、冒泡排序的基本原理、算法流程图及 程序实现。 2、一维数组 3、双重循环
main() { int r[8];int i,j,t; printf("Input 8 numbers:\n"); for(i=0;i<8;i++) scanf("%d",&r[i]); for(j=0;j<7;j++) for(i=0;i<7-j;i++) if(r[i]>r[i+1]) {t=r[i]; r[i]=r[i+1]; r[i+1]=t;} printf("The sorted numbers:\n"); for(i=0;i<8;i++) printf("%4d",r[i]); system("pause"); }
r[0]>r[1]
第一步做什么? if ( 否 {
)
如何交换数据? } r[1]>r[2] 否 有没有办法让流程图更 加简洁呢? 不断的这样画下去要画多少个 类似的选择结构?
…
二.画出第一趟排序的算法流程图: 用简洁的循环结构进行表示 根据流程图完善程序:
开始
i=0
是 t=r[ i] t=r[0] r[ ir[0]=r[1] ] =r[i +1] R[1]=R[2] tt r[ir[1]= +1] = r[r[0]>r[1] i ]>r[i +1] 否
4 ห้องสมุดไป่ตู้7 4 76 4 13 4 27 4 49 4 49 4 49 4 49
5 76 5 13 5 27 5 49 5 49 5 49 5 49 5 49
6 13 6 27 6 49 6 65 6 65 6 65 6 65 6 65
7 27 7 49 7 76 7 76 7 76 7 76 7 76 7 76
第一趟排序后的数据和序号 序号 数据 0 38 1 49 2 65 3 76 4 13 5 27 6 49 7 97
第二趟排序的步骤: 序号 数据 0 38 1 49 2 65 3 76 13 4 13 76 27 5 27 76 49 6 49 76 7 97
65 <76, 保持不变 49<65, 保持不变 76>13, 76>27, 交换位置 交换位置 76>49, 76<97, 交换位置 保持不变 38<49, 保持不变
那么同样的结构要进 行多少次呢? i++
有没有办法让流程图更 加简洁呢?
是
i <=5
否 结束
三:画整个冒泡排序的流程图。 分析:这是一个两重循环结构。
是
t=r[i ] r[i ]=r[i +1] r[i +1]= t
开始
j=0 i=0
r[i ]>r[i +1] 否
i++
是
i <=?
否
是
j++ j<=6
for( ; if ( {
; )
)
i++
是
}
i <=6
否 结束
按照这种画法第二趟、第三趟、第四趟排序的流程图 怎样画?怎样把整个冒泡排序的流程图画出来?
开始
i=0
是 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]= tt r[ i +1]=
为了方便分析,我们把数组r中的元素先 用一个表格列出来,如下:
原数据和序号
序号
数据
0
49
1
38
2
65
3
97
4
76
5
13
6
27
7
49
第一趟排序的步骤: 序号 0 1 2 3 4 5 6 7
数据
49 38
38 49
65
97 76
76 97 13
13 97 27
27 97 49
49 97
97>49, 交换位置 49<65, 65<97, 保持不变 保持不变 97>76, 97>13, 交换位置 97>27, 交换位置 交换位置 49>38, 交换位置 对比原数据经过第一趟排序,实现了什么目的? 第一趟排序,一共进行了多少次比较?
初始
序号 数据 序号 数据 序号 数据 序号 数据 序号 数据 序号 数据 序号 数据 序号 数据
1 49 1 38 1 38 1 38 1 38 1 13 1 13 1 13
2 38 2 49 2 49 2 49 2 13 2 27 2 27 2 27
3 65 3 65 3 65 3 13 3 27 3 38 3 38 3 38
否 结束
开始
输入数据
j=0 i=0 是 r[i]>r[i+ 1]
否
t=r[i ] r[i ] =r[i +1] r[i +1] = t
i++
main() { int r[8]; int i,j,t; printf("Input 8 numbers:\n"); for(i=0;i<8;i++) scanf("%d",&r[i]); for( ; ; ) for( ; ; ) {
8 49 8 97 8 97 8 97 8 97 8 97 8 97 8 97
1趟
2趟
3趟 4趟
5趟
6趟 7趟
描述算法:
试着将我们刚才排序的全过程用算法流 程图表示出来。
我们把它分成几步来做。
一.画出比较r[0]与r[1] 的算法流程图: 分析:
是 t=r[0] r[0] =r[1] r[1] = t 继续: 是 t=r[1] r[1] =r[2] r[2] = t 开始 根据流程图完善代码:
i<=6-j
j++
j<=6
输出数据 结束
} printf("The sorted numbers:\n"); for(i=0;i<8;i++) printf("%5d",r[i]); system("pause"); }
冒泡排序
基本思想:
对相邻两个数进 行比较,将较小的调 到前面,两两比较一 轮之后,最大的一个 数被放置在最后面; 接着从头开始重复执 行以上操作,次大的 数被放置在倒数第二 位,依次类推,数列 由后往前逐渐成型。
经过第二趟排序,实现了什么目的?
观察原数据与第一、二趟排序后的数据 序号 数据 序号 0 49 0 1 38 1 2 65 2 3 97 3 4 76 4 5 13 5 6 27 6 7 49 7
数据
序号
38
0
49
1
65
2
76
3
13
4
27
5
49
6
97
7
数据
38
49
65
13
27
49
76
97
我们预计最多一共要经过多少趟排序呢?
株洲市第二中学 信息技术组
刘辉琴 杜新宇
活动: 按照计算机的工作方式将下面一组无序的 将下面一组无序的数据从小到大排列。 数据从小到大排列。 { 49,38,65,97,76,13,27,49 } 数据如何存储? ——一维数组
定义一维数组: int r[8]; 数组元素为: r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7]
冒泡排序 选择排序
插入排序
……
小结:
1、冒泡排序的基本原理、算法流程图及 程序实现。 2、一维数组 3、双重循环
main() { int r[8];int i,j,t; printf("Input 8 numbers:\n"); for(i=0;i<8;i++) scanf("%d",&r[i]); for(j=0;j<7;j++) for(i=0;i<7-j;i++) if(r[i]>r[i+1]) {t=r[i]; r[i]=r[i+1]; r[i+1]=t;} printf("The sorted numbers:\n"); for(i=0;i<8;i++) printf("%4d",r[i]); system("pause"); }
r[0]>r[1]
第一步做什么? if ( 否 {
)
如何交换数据? } r[1]>r[2] 否 有没有办法让流程图更 加简洁呢? 不断的这样画下去要画多少个 类似的选择结构?
…
二.画出第一趟排序的算法流程图: 用简洁的循环结构进行表示 根据流程图完善程序:
开始
i=0
是 t=r[ i] t=r[0] r[ ir[0]=r[1] ] =r[i +1] R[1]=R[2] tt r[ir[1]= +1] = r[r[0]>r[1] i ]>r[i +1] 否
4 ห้องสมุดไป่ตู้7 4 76 4 13 4 27 4 49 4 49 4 49 4 49
5 76 5 13 5 27 5 49 5 49 5 49 5 49 5 49
6 13 6 27 6 49 6 65 6 65 6 65 6 65 6 65
7 27 7 49 7 76 7 76 7 76 7 76 7 76 7 76
第一趟排序后的数据和序号 序号 数据 0 38 1 49 2 65 3 76 4 13 5 27 6 49 7 97
第二趟排序的步骤: 序号 数据 0 38 1 49 2 65 3 76 13 4 13 76 27 5 27 76 49 6 49 76 7 97
65 <76, 保持不变 49<65, 保持不变 76>13, 76>27, 交换位置 交换位置 76>49, 76<97, 交换位置 保持不变 38<49, 保持不变
那么同样的结构要进 行多少次呢? i++
有没有办法让流程图更 加简洁呢?
是
i <=5
否 结束
三:画整个冒泡排序的流程图。 分析:这是一个两重循环结构。
是
t=r[i ] r[i ]=r[i +1] r[i +1]= t
开始
j=0 i=0
r[i ]>r[i +1] 否
i++
是
i <=?
否
是
j++ j<=6
for( ; if ( {
; )
)
i++
是
}
i <=6
否 结束
按照这种画法第二趟、第三趟、第四趟排序的流程图 怎样画?怎样把整个冒泡排序的流程图画出来?
开始
i=0
是 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]= tt r[ i +1]=
为了方便分析,我们把数组r中的元素先 用一个表格列出来,如下:
原数据和序号
序号
数据
0
49
1
38
2
65
3
97
4
76
5
13
6
27
7
49
第一趟排序的步骤: 序号 0 1 2 3 4 5 6 7
数据
49 38
38 49
65
97 76
76 97 13
13 97 27
27 97 49
49 97
97>49, 交换位置 49<65, 65<97, 保持不变 保持不变 97>76, 97>13, 交换位置 97>27, 交换位置 交换位置 49>38, 交换位置 对比原数据经过第一趟排序,实现了什么目的? 第一趟排序,一共进行了多少次比较?
初始
序号 数据 序号 数据 序号 数据 序号 数据 序号 数据 序号 数据 序号 数据 序号 数据
1 49 1 38 1 38 1 38 1 38 1 13 1 13 1 13
2 38 2 49 2 49 2 49 2 13 2 27 2 27 2 27
3 65 3 65 3 65 3 13 3 27 3 38 3 38 3 38
否 结束
开始
输入数据
j=0 i=0 是 r[i]>r[i+ 1]
否
t=r[i ] r[i ] =r[i +1] r[i +1] = t
i++
main() { int r[8]; int i,j,t; printf("Input 8 numbers:\n"); for(i=0;i<8;i++) scanf("%d",&r[i]); for( ; ; ) for( ; ; ) {
8 49 8 97 8 97 8 97 8 97 8 97 8 97 8 97
1趟
2趟
3趟 4趟
5趟
6趟 7趟
描述算法:
试着将我们刚才排序的全过程用算法流 程图表示出来。
我们把它分成几步来做。
一.画出比较r[0]与r[1] 的算法流程图: 分析:
是 t=r[0] r[0] =r[1] r[1] = t 继续: 是 t=r[1] r[1] =r[2] r[2] = t 开始 根据流程图完善代码:
i<=6-j
j++
j<=6
输出数据 结束
} printf("The sorted numbers:\n"); for(i=0;i<8;i++) printf("%5d",r[i]); system("pause"); }
冒泡排序
基本思想:
对相邻两个数进 行比较,将较小的调 到前面,两两比较一 轮之后,最大的一个 数被放置在最后面; 接着从头开始重复执 行以上操作,次大的 数被放置在倒数第二 位,依次类推,数列 由后往前逐渐成型。
经过第二趟排序,实现了什么目的?
观察原数据与第一、二趟排序后的数据 序号 数据 序号 0 49 0 1 38 1 2 65 2 3 97 3 4 76 4 5 13 5 6 27 6 7 49 7
数据
序号
38
0
49
1
65
2
76
3
13
4
27
5
49
6
97
7
数据
38
49
65
13
27
49
76
97
我们预计最多一共要经过多少趟排序呢?