冒泡排序法教案

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

一、复习回顾

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

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

(已经学过的排序方法有:直接插入排序、希尔排序、

直接插入排序:顺序的把待排序序列中的各个记录按其关键字的大小,插入到已排序的序列的适当位置。

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

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

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

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]

- 1 -

第二次排序结果: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

答第一次排序: 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分钟)

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

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

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

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

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

思考方法:

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

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

对一个序列来说,共进行多少次冒泡排序呢?最多和上面第二步的比较次数一样,但也可提前结束,只要在某一遍冒泡中没有发生数据交换即可。如何确实是否发生数据交换,在程序中,可以考虑设置一个标

志位,当发生数据交换时,更改标志位,每次重新进行冒泡排序之前可以检查标志位,如果没有发生改变,则可证明上一次冒泡已经没有数据交换发生,也就是说数据序列已经排好,可以停止进行冒泡排序。

冒泡算法函数

{

设置标志位;

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

for循环(对n个数据的序列进行n-1次冒泡,但是如果没有交换发生则跳出该循环){

//以下循环用来对该数据序列进行一次冒泡排序

for(单次冒泡排序需要进行n-1次)

{

比较相邻两数的大小;

if(前大后小)

{

交换

}

else //前小后大

{

位置不变

}

}

}

}

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

本节课:

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

2.然后介绍了冒泡排序的思想;(每次冒一个泡泡,把最大的冒到最后)

3.我们通过三道练习题对一组无序数据进行了排序;

4.通过练习题我们看出来,数据初始序列越接近目标序列,冒泡的次

数越少;因此我们总结出了冒泡排序最多进行的次数和终止的条件;

5.最后,我们根据冒泡排序的思想用文字描述了冒泡函数的构成方法;

相关文档
最新文档