冒泡排序法教案

2024-07-20

冒泡排序法教案(通用3篇)

冒泡排序法教案 篇1

数据结构——冒泡排序(第19讲,第9章)

一、复习回顾

什么是排序:排序是把一个无序的数据元素序列整理成有规律的按排序关键字递增(或递减)排列的有序序列的过程。

/************************************************(已经学过的排序方法有:直接插入排序、希尔排序、直接插入排序:顺序的把待排序序列中的各个记录按其关键字的大小,插入到已排序的序列的适当位置。

希尔排序:(缩小增量排序),不断把待排序的记录分成若干个小组,对同一组内的记录进行排序,在分组时,始终保持当前组内的记录个数超过前面分组排序时组内的记录个数。)

************************************************/

二、第一小节(目标:理解掌握冒泡思想)

1、给出冒泡排序的定义(25分钟)

将待排序序列中第一个记录的关键字R1.key与第二个记录的关键字R2.key作比较,如果R1.key>R2.key,则交换记录R1和R2在序列中的位置,否则不交换;然后继续对当前序列中的第二个记录和第三个记录作同样的处理,依此类推,知道序列中倒数第二个记录和最后一个记录处理完为止,我们称这样的过程为一次冒泡排序。

2、请学生上台做排序练习(15分钟做题+10分钟讲解)(巩固排序思想的掌握)

第一题: 38 5 19 26 49 97 1 66 第一次排序结果:5 19 26 38 49 1 66 [97] 第二次排序结果:5 19 26 38 1 49 [66 97] 第三次排序结果:5 19 26 1 38 [49 66 97] 第四次排序结果:5 19 1 26 [38 49 66 97] 第五次排序结果:5 1 19 [26 38 49 66 97] 第六次排序结果:1 5 [19 26 38 49 66 97] 第七次排序结果:1 [5 19 26 38 49 66 97] 最后结果序列: 1 5 19 26 38 49 66 97

第二题: 8 7 6 5 4 3 2 1

数据结构——冒泡排序(第19讲,第9章)

答 第一次排序: 7 6 5 4 3 2 1 [8] 第二次排序: 6 5 4 3 2 1 [7 8] 第三次排序: 5 4 3 2 1 [6 7 8] 第四次排序: 4 3 2 1 [5 6 7 8] 第五次排序: 3 2 1 [4 5 6 7 8] 第六次排序: 2 1 [3 4 5 6 7 8] 第七次排序: 1 [2 3 4 5 6 7 8] 最后结果序列: 1 2 3 4 5 6 7 8

第二题: 1 2 3 4 5 6 7 8 第一次排序: 1 2 3 4 5 6 7 [8] 第二次排序: 1 2 3 4 5 6 [7 8] 第三次排序: 1 2 3 4 5 [6 7 8] 第四次排序: 1 2 3 4 [5 6 7 8] 第五次排序: 1 2 3 [4 5 6 7 8] 第六次排序: 1 2 [3 4 5 6 7 8] 第七次排序: 1 [2 3 4 5 6 7 8] 最后结果序列: 1 2 3 4 5 6 7 8]

从练习题中引出:一次冒泡排序的结果:使关键字最大的记录排在了序列的最后一个位置上。(这很重要,要强调)

比较后两题的题目区别和排序过程区别,作为课间思考题。(第二题是一组逆序数据,每一个排序都进行了数据交换,共进行了8-1=7次冒泡;第三题是一组正序数据,进行完一次排序后就发现,没有任何数据交换发生,后面进行的第二次到第七次冒泡的过程完全一样。)

三、第二小节

3、冒泡排序终止的条件(20分钟)

课堂思考题:考虑任何一组序列最多进行多少次冒泡排序就可保证顺序一定已经排好了。

思考:如果序列初始顺序是逆序,需要进行多少次排序(要记住,数据结构——冒泡排序(第19讲,第9章)

每次冒泡排序的结果:可以保证最大的记录在最后一个位置上)。如果序列初始顺序是正序,需要进行多少次排序就可以保证数据序列顺序。如何使排序过程适可而止?既排好序又不多余进行?

当计算机对一组数据进行排序之前,并不知道该组数据是什么顺序,因此,必须要进行至少一次的比较和排序,当某一比较和排序进行完之后发现没有任何数据交换发生,证明任何相邻的两数都符合目标顺序要求,因此,也不必再进行下一下比较排序了。

结论:当进行某次冒泡排序时,若没有任何两个记录交换位置,则表明序列已排好,此时排序可结束。

4、用文字(伪码)描述冒泡排序算法(15分钟)思考方法:

首先是对数组的相邻的两数比较,根据比较结果确定是否交换位置;这种比较进行的次数比数据列中数据个数少1;

(此两步完成了一次冒泡排序)

对一个序列来说,共进行多少次冒泡排序呢?最多和上面第二步的比较次数一样,但也可提前结束,只要在某一遍冒泡中没有发生数据交换即可。如何确实是否发生数据交换,在程序中,可以考虑设置一个标志位,当发生数据交换时,更改标志位,每次重新进行冒泡排序之前可以检查标志位,如果没有发生改变,则可证明上一次冒泡已经没有数据交换发生,也就是说数据序列已经排好,可以停止进行冒泡排序。

冒泡算法函数 { 设置标志位;

//以下循环用来控制冒泡排序进行的次数

数据结构——冒泡排序(第19讲,第9章)

for循环(对n个数据的序列进行n-1次冒泡,但是如果没有交换发生则跳出该循环){ //以下循环用来对该数据序列进行一次冒泡排序 for(单次冒泡排序需要进行n-1次){ 比较相邻两数的大小;

if(前大后小){ 交换 } else //前小后大 {

位置不变 } } } }

5、回顾总结冒泡排序的思想(10分钟)本节课:

1.首先回顾了什么是排序;

2.然后介绍了冒泡排序的思想;(每次冒一个泡泡,把最大的冒到最后)3.我们通过三道练习题对一组无序数据进行了排序;

4.通过练习题我们看出来,数据初始序列越接近目标序列,冒泡的次数越少;因此我们总结出了冒泡排序最多进行的次数和终止的条件; 5.最后,我们根据冒泡排序的思想用文字描述了冒泡函数的构成方法;

四、课后作业

1、用冒泡排序法对数字序列进行排序(要写出6次排序步骤)

55 48 37 10 90 84 答 55 48 37 10 60 84 90 48 37 10 55 60 84 90 37 10 48 55 60 84 90 10 37 48 55 60 84 90

数据结构——冒泡排序(第19讲,第9章)

10 37 48 55 60 84 90

2、用C语言描述冒泡排序算法。

Void BubbleSort(elemtype x[],int n)//传入序列和序列数字个数 {

int i,j,flag=1;elemtype

temp;for(i=1;i x[j+1].key){ flag=1;temp=x[j];x[j]=x[j+1];x[j+1]=temp;} } } }

冒泡排序法教案 篇2

永川职业教育中心

杨进

【案例背景】

排序是计算机学科中一项复杂而重要的技术,在各种软件中使用频率都很高,因此专家们研究了各种排序算法。在中职类设计课程教学中,常以冒泡排序来讲解排序的原理,它简单,但过程繁琐,传统教学很难激发学生兴趣,学生不易理解,也很难编写掌握冒泡排序。因此,如何合理设计教学过程,让学生掌握冒泡排序的思想和编程方法,又能发散思维,扩充知识,进而激发学生对编程课程的兴趣,是一个关键问题。

1、学情分析

学生已学习了程序设计的三种结构,学习使用了数组。但在学习排序算法的过程中学生可能会对数组变量的变化在理解上存在一定困难,在排序算法中,对双重循环内外层的作用及有关循环参数的设置可能会产生一些不合理或是错误,需要通过实践的体验进行强化使用规范。

2、教学目标

知识目标:掌握冒泡排序的原理;能结合冒泡排序的原理看懂冒泡排序的主要代码;理解冒泡排序的流程图;

能力目标:学会使用冒泡排序思想设计解决简单排序问题的算法;进一步理解程序设计的基本方法,进一步体会算法与程序实现的关系;

情感目标:培养学生分析问题、发现规律的能力,激发学生学习热情;培养良好的读程习惯;

3、教学重点、难点

重点:冒泡排序算法的基本思想,双重循环应用

难点:双重循环程序的解读,冒泡排序算法实现后对程序的理解

4、教学策略与手段

以循序渐进、层层深入为教学的指导方针,采用讲解法、演示法、讨论合作、分析归纳法引导学生参与思考,由特殊到一般,有效地突出重点突破难点,逐步深化对冒泡算法、循环思想和执行过程的理解。

5、课前准备

PPT课件、冒泡排序的视频文件。【案例描述】

师:在前面的学习中,我们学过了用EXCEL进行一些简单的数据处理方法,请同学们说说看你是怎么对同学的成绩排次序的?

生:先选好数后,点排序就行了。

师:是的。只要用EXCEL的排序功能就可以了,点点鼠标就能完成。在前面的学习中,我们已经解开了很多单击鼠标就可以完成某一个任务的秘密,今天我们就来探访一下排序的秘密。

师:先让我们来做个舞蹈视频,同时要求同学们谈谈看后的自己的想法。并要请几位同学模拟示范。

这段真人编排的排序算法的舞蹈视频,非常生动有趣,能充分吸引学生的眼球,极大激发了学生的兴趣。

播放完毕,老师提问:请同学们说说你们看到了什么? 生:议论并说自己的想法。(冒泡排序的过程)

由于视频播放相对较快,为了让学生更好理解与参与,老师还根据具体情况请了四位涌跃分子来作下一个游戏。

请四位同学从前到后坐好并拿好老师给你们的数字,然后从后面开始两个两个比较你们手中的数,如果后面的同学数小的话就和前面的同学换一下座位,直到拿到最小数的同学坐在第一个位子为止。

现在开始,请其他同学注意观察。请同学们说说你们看到了什么? 生:议论并说自己的想法

师:我听到了同学们的发言了,你们都看到了最小数已经在最前面了,并且是经过了3次的比较。想一想,如果要让拿第二小的数的同学坐上第二个座位,还要进行几次的比较呢?(注意只能从后开始两两比较)请拿数的同学演示一下。几次?

生:两次

师:对了,是两次,比第一次少了一次。请四位同学回到座位。刚才我们通过四位

同学的演示其实给我们展示了一种数据排序的方法---冒泡法。那么什么是冒泡排序法呢?

冒泡排序法:是指把n个要排序的数看成一垂直列,从最下面的数开始两两比较相邻的两个数,把小的数向上换,经过n-1次处理以达到排序目的的一种排序方法。(课件展示)

分析总结学生的演示:(课件展示)第1次冒泡排序时 j 从 4 开始到2:

第2次冒泡排序时 j 从 4 开始到3:

第3次冒泡排序时 j 从 4 开始到4

如果用伪代码可表示为:

第1次冒泡排序时 j 从 4 开始到2: for(j=4;j>=2 ,j--)if(d[j]

for(j=4;j>=3 ,j--)if(d[j]=4 ,j--)if(d[j]

问:如果我们用一个变i(值分别为1,2,3)来记录冒泡的次数,请问能否将上述的三次代码合并成一段通用的代码呢?

生:能(学生讲伪代码)for(j= 4,j>=i+1,j--)if(d[j]

归纳分析引入核心代码: 当i=1到3时:(课件展示)for(j= 4;j>=i+1;j--)if(d[j]

那么,我们用我们学过的循环语句就可以把某一次的比较表示为:(课件展示)for(j= 4;j>=i+1;j--)if(d[j]

生:思考

师:其实,我们可以在刚才的循环外再加一层循环,使i也参与变化,以达到对次数的控制(课件展示)

for(i=1;i<4;i++)for(j=4;j>= i+1;j--)if(d[j]

刚才我们已经讲解了4个数冒泡排序的代码,那么有n个数呢?(课件展示)for(i=1;i

for(j=n;j>= i+1;j--)if(d[j]

分析冒泡排序的源程序(用tc编辑器演示分析)为了进一步检验学生的情况,老师作了问题延伸:

编写一个评分系统的代码段:有10个评委,最后得分为去掉一个最高分与一个最低分后的平均分。(提示:排序后要将最小和最大的数去除,再累加其余各数并除以8)。

【案例反思】

1、本课时采用通过对冒泡排序的基本方法进行分析,利用视频、游戏等多种教学手段,采用正向讲解算法思想,总结规律,归纳算法等方法,一方面使学生顺利从排序的思想过渡到伪代码并到代码的书写,逐步引出双循环和冒泡排序的程序实现,另一方面培养学生观察算法,分析算法和使用算法的双向思维意识和发散思维能力,提高学生自觉能力和独立思考能力,体现了在课程教学中培养学生综合素质的教育思想。

2、老师要注意讲授时间,要能及时调节课堂气氛,防止学生课内思维疲劳。

Go语言实现选择法排序实例 篇3

代码如下:

package main

import “fmt”

func select_sort(a []int) {

len := len(a)

for i:=0; i < len-1; i++ {

k := i

j:= i + 1

for ; j < len; j++ {

if a[j] < a[k] { k = j }

}

if k != i {

a[i], a[k] = a[k], a[i]

}

}

}

func print_array(a []int) {

for i := 0; i < len(a) - 1; i++ {

fmt.Printf(“%d, ”, a[i])

}

fmt.Print(a[len(a)-1])

}

func main() {

a := []int{1, 8, 5, 9, 4, 3, 6, 6}

print_array(a)

fmt.Printf(“ ”)

select_sort(a)

print_array(a)

}

输入:

1, 8, 5, 9, 4, 3, 6, 6

输出:

1, 3, 4, 5, 6, 6, 8, 9

上一篇:手抄报比赛活动计划下一篇:新源镇纪检监察信息第六期