首页 > 教学资源 > 教案 > 其它教案 > 算法与程序设计——选择排序

算法与程序设计——选择排序

甜到心口 点赞 分享
算法与程序设计——选择排序

微信扫码分享

算法与程序设计——选择排序

[小组讨论]选择排序的实质是每次把一堆数据中的最小数移到某个位置,那么这样的操作在规模为n的数组中会做多少次?

——n-1次,因为经过n-1次操作已经确定了第1到n-1个位置的次序,第n个位置也自然可以确定。

[小组讨论]找出数组中的最小数用什么策略?

[复习巩固]可以借助一个自定义的integer型变量min,用它记录最小的一个数据的下标。

首先,不管实际情况如何,我们先假设数组中第1个元素为最小,于是有min=1,再把这个元素与从第2个元素开始的所有元素作比较,一旦有比d(min)更小的元素存在,则修改min变量值为新的较小元素下标。这样,在d(min)经过了从第2个元素到最后一个元素的一一比较后,所得到min应该就是第1到n个元素中的选举出来的最小元素下标了。

然后用类似的方法,把第2到n个元素中最小数选举出来;把第3到n个元素中最小数选举出来……

i←1:min←1:j←2

 

开始

j<n ?

 

d(j)<d(min) ?

min←j

 

y

y

n

………………

j=j+1

最后把每次选举出来的结果依次输出即可实现升序排列。

[学生完成第1遍处理过程的流程图片断]

[依据流程图写出代码]

dim min as integer

dim j as integer

min=1

for j=2 to n

   if d(j)<d(min) then  min=j

next j

[小组讨论]

在遍历了一遍后如果发现第1-n个数中的最小数d(min),根据选择排序的思想,需要把它与第1个数字进行交换。如何进行?

[请同学发言]打个比方,在厨房里有一瓶酱油、一瓶醋和一个空瓶,如何利用这个空瓶实现酱油与醋?

——可先把酱油倒到空瓶中,再把醋倒到原来装酱油的瓶中,然后从原来的空瓶中把酱油倒到原来装醋现在已经空的瓶中,即可实现换位。

[教师]大家动动脑筋,用这种思想,试试把d(1)与d(min)换位,并写出相应的代码。

dim temp as integer

temp = d(i):d(i)=d(min):d(min)=temp    ’关键在于引入“空瓶”变量temp

[思考]是不是每遍历一遍后必须做这样的一次交换?

——不是必须的,只有当确实发现有比d(1)小的数后才交换

[教师]那怎么知道有没有发现比d(1)更小的数呢?

i←1:min←1:j←2

开始

j<n ?

d(j)<d(min) ?

min←j

y

n

n

………………

min<>1 ?

temp = d(1)

d(1)=d(min)

d(min)=temp

 

y

j=j+1

——其实在遍历之前我们已经假设第1个元素最小,即min=1,所以在遍历一遍后我们只需要验证一下min=1是否还成立。成立则表明没有比第1个元素小的数,不成立则表明有比第1个元素小的数,且它的下标为min,此时要交换d(1)与d(min)。

[学生完善流程图及代码]

if min <> 1 then

  temp = d(1):d(1)=d(min):d(min)=temp

end if

[教师]我们先前说过,对于规模为n的数组,需要遍历处理次数为n-1次,以上的流程就是这n-1次中需要重复做的事,对于重复处理的事,可以用什么结构?

——循环,以上的比较、交换即为循环体

[教师]大家试着把这个循环结构流程图画出来

[学生完善流程图及代码]

 

开始

j<n ?

d(j)<d(min) ?

min←j

y

n

输出排序结果

n

min<>i ?

temp = d(i)

d(i)=d(min)

d(min)=temp

 

y

i<=n-1

i←1

y

n

结束

i=i+1

j=j+1

min=i:j=i+1

for i = 1 to n-1

   min = i

   for j = i + 1 to n

221381
领取福利

微信扫码领取福利

算法与程序设计——选择排序

微信扫码分享