冒泡排序算法课件

合集下载

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

课件-冒泡排序算法的数组实现.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课件

冒泡排序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]

冒泡排序 ppt课件

冒泡排序 ppt课件

稳定排序
冒泡排序是一种稳定的排序算法 ,相同元素的相对位置不会改变

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

冒泡排序的算法详解 ppt课件

冒泡排序的算法详解  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

冒泡排序 课件 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数据;

选修一高中信息技术-冒泡排序 课件

选修一高中信息技术-冒泡排序 课件

√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课件

动画演示(冒泡法)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课件(绝对精品)

动画演示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
点击开始
语言程序设计——排序算法
情景导入 冒泡排序 编写程序 调试程序
算法思想 动画演示

浙教版高中信息技术《冒泡排序算法》精品课件

浙教版高中信息技术《冒泡排序算法》精品课件

浙教版高中信息技术《冒泡排序算法》精品课件一、教学内容本节课我们将要学习是浙教版高中信息技术选修3《算法与程序设计》中第二章第一节——《冒泡排序算法》。

具体内容包括冒泡排序原理、流程图绘制、算法描述以及用编程语言实现冒泡排序。

二、教学目标1. 理解冒泡排序原理和流程。

2. 学会绘制冒泡排序流程图。

3. 掌握冒泡排序算法描述和编程实现。

4. 培养学生分析问题和解决问题能力。

三、教学难点与重点教学难点:冒泡排序流程图绘制和编程实现。

教学重点:冒泡排序原理和算法描述。

四、教具与学具准备1. 教具:PPT课件、计算机、投影仪。

2. 学具:学生用书、练习本、计算机。

五、教学过程1. 实践情景引入以生活中例子(如:排队)引入排序概念,激发学生兴趣。

2. 理论讲解详细讲解冒泡排序原理和流程,引导学生理解算法核心思想。

3. 流程图绘制指导学生绘制冒泡排序流程图,强调关键步骤和条件判断。

4. 算法描述根据流程图,引导学生用自然语言描述冒泡排序算法。

5. 编程实现使用Python编程语言,带领学生实现冒泡排序,并解释关键代码。

6. 例题讲解分析一道典型例题,讲解如何应用冒泡排序解决问题。

7. 随堂练习分组讨论并完成随堂练习,巩固所学知识。

六、板书设计1. 《冒泡排序算法》2. 内容:冒泡排序原理流程图绘制算法描述编程实现七、作业设计1. 作业题目:请用自然语言描述冒泡排序算法。

编写一个Python程序,实现冒泡排序。

2. 答案:冒泡排序算法描述:从数组第一个元素开始,相邻两个元素进行比较,若前一个大于后一个,则交换位置。

经过一轮比较后,最大元素被移到数组。

然后对剩下元素重复这个过程,直到所有元素都被排序。

Python程序如下:def bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, ni1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]return arrarr = [64, 34, 25, 12, 22, 11, 90]print("原数组:", arr)sorted_arr = bubble_sort(arr)print("排序后数组:", sorted_arr)八、课后反思及拓展延伸1. 课后反思:本节课学生对冒泡排序理解程度,以及编程实现过程中遇到问题。

冒泡排序算法演示PPT

冒泡排序算法演示PPT

;) )
i++ 是 i <=6
否 结束
}
9
按照这种画法第二趟、第三趟、第四趟排序的流程图 怎样画?怎样把整个冒泡排序的流程图画出来?
开始
i=0


rR[i[]1>]>r[Ri +[21]]
tt==Rr[[i2]]
rR[i[1]=]=r[Ri [+21]]
rR[i[+21]=]=t t
分析:后面的排序只要 按照这种方法不断进行就 行了。
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"); }
不断的这样画下去要画多少个
类似的选择结构?
8

二.画出第一趟排序的算法流程图: 用简洁的循环结构进行表示 根据流程图完善程序:
开始
i=0
是 r[ri[]0>]>r[ri[+1]1] 否 tt==rr[[i0]] r[Rir[]01=]=r[rRi[+[12]1]] r[ir[+11]]==t t
for( ; if ( {
我们预计最多一共要经过多少趟排序呢?
5
初始
序号
1
2
3
4
5
6
7
8
数据 49

冒泡排序PPT课件

冒泡排序PPT课件
冒泡排序的基本原理是对存放原始数据的数 组,按从前往后的方向进行多次扫描,每次 扫描称为一趟。当发现相邻两个数据的次序 与排序要求的大小次序不符合时,即将这两 个数据进行互换。这样,较小的数据就会逐 个向前移动,好象气泡向上浮起一样。
2020年10月2日
3
做一做:
下面我们请几位同学上来讲台为我们演示 一下这种排序的过程,首先按照被叫到的 顺序排列,再用这种方法由低到高进行排 序。
2020年10月2日
4
例:用冒泡排序的方法将下面一组无序数组 排成从小到大
{ 49,38,65,97,76,13,27,49 }
分析:首先为了方便分析,我们把所给的数据 先用一个表格列出来,如下:
2020年10月2日
5
原数据和序号
序 号
1
2
3
4
趟9排3序8 的6步5 骤9:7 76 13 27 49
R[1], R[2], R[3], R[4], R[5], R[6], R[7], R[8]
分析:

开始 R[1]>R[2]
第一步做什么? 否
t:=R[1] R[1]:=R[2]
R[2]:= t
如这会何这样有交样交什换行换么数吗数问据?据题,,?
是 R[2]>R[3] 否
t:=R[2] R[2]:=R[3]
经过第二趟排序,实把现第了二什大么的目数的沉?到倒数第二个位置了!
2020年10月2日
7
观察原数据与第一、二趟排序后的数据
序 号
1
2
3
4
5
6
7
8
序数 据号49 138 625 97 3 76 143 27 5 49 6
7

冒泡排序的算法详解课件

冒泡排序的算法详解课件

冒泡排序的名称由来
• 名称由来:冒泡排序的名字来源于越小的元素会经过交换 慢慢“浮”到数列的顶端,如同气泡一样浮到水面上。
冒泡排序的基本思想
01
基本思想:通过不断地比较相邻 的两个元素,并进行交换,使得 较大的元素逐渐“冒泡”到数列 的末端。
02
重复以上过程,直到整个数列有序。
冒泡排序的算法步
总结词:简洁明了
详细描述:Python语言实现冒泡排序算法,代码简洁,易于理解。通过相邻元素比较和交换,使得每 一趟都能将最大的数移到正确的位置。
使用Java实现冒泡排序
总结词:结构严谨
详细描述:Java语言实现冒泡排序算法,代码结构严谨,适 合初学者学习。通过双重循环实现元素的比较和交换,能够 保证排序的正确性。
尽管冒泡排序在实际应用中可能不是最高效的算法, 但其简单易懂的特点使其成为教学和初学者学习排序 算法的常用选择。
THANKS.
优化交换过程
使用临时变量来交换元素,而不是通过多次赋值操作,这样可以减少交换过程中的操作 次数。
优化小数组的排序
使用快速排序或归并排序
对于小数组,使用快速排序或归并排序可能更为高效。 当数组大小小于一定阈值时,可以切换到其他排序算 法。
预处理小数组
对于小数组,可以通过预处理的方式将其排序,然后 将其存储在预定义的数组中,以减少排序时间。
使用C实现冒泡排序
总结词:高效快速
详细描述:C语言实现冒泡排序算法,利用指针和数组操 作,使得代码更加高效。通过减少不必要的比较和交换, 能够提高排序的效率。
冒泡排序的性能分
04

时间复杂度分析
01
最好情况:O(n)
02
最坏情况:O(n^2)

C语言常见排序算法.ppt

C语言常见排序算法.ppt

1.1.2 快速排序
算法实例:
始关键字
pivotkey 21 25 low
49 25* 16 08 high
一次交换
21
二次交换
三次交换
high-1 完成一趟排序
08 25 low
49 25* 16
high
08
49 25* 16 25
low
high
08 16 49 25*
25
low
08 16
low
常见排序算法
1.1 常见的排序算法
冒泡排序 快速排序 直接插入排序 希尔排序 选择排序 堆排序 归并排序
1.1.1 冒泡排序
算法描述
设待排序记录序列中的记录个数为n 一般地,第i趟起泡排序从1到n-i+1 依次比较相邻两个记录的关键字,如果发生逆序,则交换之 其结果是这n-i+1个记录中,关键字最大的记录被交换到第n-i+1的位 置上,最多作n-1趟。
08 16
21
high 25* 49 25
high 25* 49 25
low high
1.1.2 快速排序
算法实例:
完成一趟排序
08 16
21 25* 49 25
分别进行快速排序 有序序列
08 16
21 25* 25 49
08 16
21 25* 25 49
11
1.1.2 快速排序
算法分析:
快速排序是一个递归过程; 利用序列第一个记录作为基准,将整个序列划分为左右两个子序列。只要 是关键字小于基准记录关键字的记录都移到序列左侧; 快速排序的趟数取决于递归树的高度。 如果每次划分对一个记录定位后, 该记录的左侧子序列与右侧子序列的长 度相同, 则下一步将是对两个长度减半的子序列进行排序, 这是最理想的情 况

冒泡排序算法课件高中信息技术浙教版必修1数据与计算(16张PPT)

冒泡排序算法课件高中信息技术浙教版必修1数据与计算(16张PPT)
冒泡排序
什么是冒泡排序
冒泡排序是在一列数据中把较
小的数据逐次向上推移的一种排 序技术。
冒泡排序算法把待排序的n个元素的数 组看成是垂直堆放的一列数据,从最下面的 一个元素起,自下而上地比较相邻的两个元 素中的数据,将较小的数据换到上面的一个 元素中。重复这一过程,直到处理完最后两 个元素中的数据,称为一遍加工。
if a(j)<a(j-1) then 交换a(j) 和a(j-1)的值
Next j
Next j
第三遍 i=3
J从4到4
For j=4 to 4 step -1
if a(j)<a(j-1) then 交换a(j) 和a(j-1)的值
Next j
for i = 1 To 3
i=1…2…3
For jF=o4rtoji+=14 sTteop i-1+ 1 Step -1
原始序列
a(1) 36 a(2) 27 a(3) 32 a(4) 18
最终序列
a(1) 18 a(2) 27 a(3) 32 a(4) 36
四个数据怎样冒泡?
第一遍冒泡 J从4到2 i=1
For j=4 to 2 step -1
第二遍 J从4到3
i=2
For j=4 to 3 step -1
if a(j)<a(j-1) then 交换a(j) 和a(j-1)的值
任务1:写出详细比较过程 任务2:比较趟数?每趟比较次数?比较和交换的原则?
冒泡排序的四种方式比较
冒泡方式 比较趟数 每趟比较次数 比较、交换规则
自下而上 从小到大
自下而上 从小到大
自上而下 从小到大
自上而下 从大到小
3

C语言课件(冒泡排序法)

C语言课件(冒泡排序法)

R[i] ≤ R[i + 1]

T=R[i] R[i]=R[i+1] R[i+1]=T i=i+1

i>7

一个完整的程序来表示这个算法: 一个完整的程序来表示这个算法
#include"stdio.h" main() { int R[8]; int T=0; int i,j; printf("请输入8个整数:"); for(i=1;i<=8;i++) scanf("%d",&R[i]); for(i=1;i<=7;i++) { for(j=1;j<=8-i;j++) { if(R[j]>R[j+1]) { T=R[j]; R[j]=R[j+1]; R[j+1]=T; } } } printf("排序后的数字是:"); for(i=1;i<=8;i++) printf("%d",R[i]; }
原数据和序号
序号 数据
1 49
2 38
3 65
4 97
5 76
6 13
7 27
8 49
第一趟下沉的步骤: 第Байду номын сангаас趟下沉的步骤:
序号 数据
1 38
2 49
3 65
4 76 97
5 13 97 76
6 27 97 13
7 49 97 27
8 97 49
经过一趟下沉, 经过一趟下沉,把最大的数沉到最底了
用流程图把这一趟下沉描述出来: 用流程图把这一趟下沉描述出来: i=1, T=0
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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
我们预计最多一共要经过多少趟排序呢?
相关文档
最新文档