高2下册粤教版 第四章 第4节 排序算法 逐字稿-4,696字

  师:同学们好,今天我们学的内容与生活密切相关。先来看看几个生活场景。

  场景一,给一本很厚的词典,要求用最快方法查出“excellent”这个单词。相信这对大家不难,因为无论多厚的字典或词典,内容都是按字母a到z的顺序排列,排序方便我们查找。

  场景二,这是一幅秩序井然的用餐场景。画面温馨,是因为同学们自觉排队,每个人按到达先后时间顺序排好,大大提高用餐效率,节约用餐时间。

  场景三,玩过踩地雷游戏的同学知道,游戏是从100以内随机选一个数字,大家轮流猜,根据猜的结果给出大了或小了的提示,直到猜中。按照上节课学的二分查找法,每次猜剩余范围中间的数字,能证明猜中100以内数字最多不超过7次,效率很高。若把游戏难度增大,查找1万以内的数字,其实同样用二分查找法,猜中数字次数最多也不超过14次,效率令人惊叹。但要知道,二分查找算法有个前提,数据必须是有序的。

  通过这三个场景,能体会到排序在生活中有积极意义,方便查找,提高学习和工作效率。所以今天这节课我们共同学习排序算法。所谓数据排序,就是把一组无序数据按由小到大或由大到小的顺序排列。

  什么时候会用到排序算法呢?来看一个问题,学校校园歌手大赛,要求对50名参赛同学现场打分,比赛结束后立刻得出前10名选手得分。也就是给50个数据,要求按顺序输出其中10个较大的数据。

  这个问题如何用编程解决呢?先简单分析,该问题需求可分成三部分。第一,输入50个数据,在计算机中需用较大空间存储,为方便定义这50个数据,运用数组存储,数组是计算机中连续的存储空间。可用循环方式输入50个数据存储到数组,所以第一个子任务能用循环加数组方式完成。

  第二,选出前10名,要从50个无序数字中选出较大的10个,显然需要对数据排序。

  第三,输出前10名,排序后的数据,只需输出数组前10个元素就是前10名。

  通过对这题的系统分析,发现解决问题的方法中,唯一陌生的是排序算法。排序算法有很多种,今天学习其中一种——选择排序。希望通过本节课学习,同学们能掌握选择排序的算法思想、代码实现及简单应用。

  先来探究第一个问题,选择排序的算法思想。如何用选择排序把一组无序数据变成有序呢?老师准备了一段视频,同学们观看时,对选择排序思路有大致了解。

  我们来看这段视频。这里有个简单数字序列“2 5 4 1 3”,5个数字显然无序杂乱,希望通过处理让它们从左到右按由小到大排序。排序有很多方法,今天讲的选择排序法是最基本、最符合日常思维习惯的一种。为便于理解选择排序法原理,把这5个数字再次打乱顺序,通过具体步骤分解完成排序。

  选择排序法的算法思路是,在数字队列中选中最小值,将它与队列头部元素交换位置,反复执行这个操作,直到整个队列有序。对于这个例子,队列长度是5,即5个数字,需执行4次操作。下面仔细分解这个过程。

  第一轮处理,队列长度为5,队列头部元素是2,在队列中找最小值,通过比对找到最小值是1,紧接着将1与队列头部元素2交换位置,第一 步操作完毕,得到的阶段性成果是,第一个元素1已然有序,后续操作无需再处理它,剩余4个数字成为后续处理对象。

  第二轮进行类似操作,此时队列长度为4,队列头部元素是5,在该队列中找到最小值2,将它与队列头部元素5交换位置。经过这两步操作,原队列前两个位置已然有序,后面操作就是重复以上过程。

  第三轮,3与4交换位置。

  第四轮,4与5交换位置,此时前面4个数字已有序,因为总共只有5个数字,剩下最后一个数字自然也有序,排序完成。

  通过视频大概了解选择排序思路,即每次从队伍中选出最小数字放在队头,再从剩余数字里选出最小的放在第二个位置,直到数字有序。那么如何从队伍里选出最小数字呢?接下来详细探究选择排序算法给5个数字排序的计算机过程。

  老师准备了5张卡片,表示5个大小不同的数字,下面从计算机使用选择排序办法,把这5个数据排成有序。首先定义变量,在计算机中数字存储需存到变量里,给5个无序数字,声明数组A[0 - 4],五个元素用来存放5个数字,还有min用来存放比较产生的最小值,WZ表示位置,即min最小值出现的位置,还有t变量,在两数交换时用作临时变量,还有两个标签i和j。

  排序时,第一轮从5个无序数字中选出最小数字放在队头,这个过程如何实现呢?首先用i标记当前队头A[0],即将存储最小值的位置,然后用A[0]更新min和WZ。接下来从i后面每个元素依次跟min值比较,如果发现比min值小,就更新min值,同时更新它的位置。这时j标签出场,从i后一个位置开始依次跟min比较,9比5大,此时不能更新。j往后移到2时,1比5小,这时用A[2]的值更新min,用2更新WZ,即最小值1出现的位置是2,这个位置指数组下标,j继续往后移,7比1大不更新,3比1大不更新。

  到此第一轮比较结束,需进行交换,把找到的最小数字与队头元素交换,即i标记元素的值,此时最小值1出现位置是2,需把A[0]和A[2]的值交换。如何交换两数呢?计算机实现方法需用到t变量,先把A[2]复制给t,把A[0]放到A[2],再把t放到A[0],实现两数交换。至此第一轮比较任务结束,找到最小值1放在最前面。

  可想而知,第二轮应从剩余4个数字中找出最小的,放在A[1]位置,仍用i标签标记1的位置,用A[i]先初始化min和WZ,接着j从i后一个位置开始依次比较。5比9小要更新min值,用5更新,5出现位置是2,j标签往后移。7比5大没更新,继续往后移。3比5小,遇到比min值小的要更新,min更新成3,位置更新成4,即第二轮比较找出最小值是3,出现位置是4,这时要交换A[1]和A[4]的值,仍用t变量,把A[4]放到t里,把A[1]放到A[4],再把t放到A[1],实现两数交换。

>> 点击阅读全文
《高2下册粤教版 第四章 第4节 排序算法 逐字稿-4,696字》.docx
将本文下载保存,方便收藏和打印
导出文档