冒泡排序算法导学案

Posted Python算法之旅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序算法导学案相关的知识,希望对你有一定的参考价值。



本文为“选考V B算法专题系列讲座8冒泡排序算 法”视频配套的导学案,请同学们先完成导学案再收看视频。
明天将推送“选考VB算法专题系列讲座 8冒泡排序 算法”视频,敬请期待!

冒泡排序算法导学案



题目

1.下表记录了6个数据的排序过程。分析表中数据可知,该排序采用的算法与排序方式分别为( )

冒泡排序算法导学案

A. 冒泡排序,降序                   

B. 选择排序,降序
C. 冒泡排序,升序                   

D. 选择排序,升序


2.在校运动会上,有五位跳远选手的成绩依次为6.41,5.85,6.21,5.63,6.01。

原始数据 6.41,5.85,6.21,5.63,6.01

第一遍 5.63,6.41,5.85,6.21,6.01

第二遍 _______________________

第三遍 5.63,5.85,6.01,6.41,6.21

第四遍 5.63,5.85,6.01,6.21,6.41

若采用冒泡排序算法对其进行从小到大排序,则第二遍的排序结果是(   

A. 5.63,6.01,5.85,6.41,6.21     

B. 5.63,6.41,5.85,6.01,6.21
C. 5.63,5.85,6.41,6.01,6.21     

D. 5.63,6.01,6.21,5.85,6.41


3.对5个字母5、9、6、3、8进行两遍冒泡排序后即为某密码锁的密码,则下列字符串中可能为该密码的是(     )

①35698 ②98635 ③35968 ④98563

A. ①②   B. ①④   C. ②③   D. ③④

4.对10个数据进行冒泡排序,需要比较的次数是( )

A. 90     B. 110     C. 45    D. 55


5.冒泡排序在某一遍加工过程中没有数据交换时,说明数据已经有序,优化程序段如下

Dim i As Integer, j As Integer, t As IntegerDim flag As Boolean 'flag标记是否发生了交换操作i = 1For i = 1 To 4 flag = False For j = 5 To i + 1 Step -1 If a(j) > a(j - 1) Then t = a(j): a(j) = a(j - 1): a(j - 1) = t flag = True End If Next j If Not flag Then Exit ForNext i

数组元素a(1)到a(5)的值依次为48,36,24,97,77”  ,经过该程序段加工后,变量i的值是( )

A. 1    B. 2     C. 3   D. 4


6. 某程序代码如下:

Const n = 5Dim a(1 To n) As IntegerPrivate Sub Command1_Click() Dim i As Integer, j As Integer, t As Integer For i = n To 2 Step -1 For j = 1 To i - 1 If a(j) > a(j + 1) Then t = a(j): a(j) = a(j + 1): a(j + 1) = t Next j Next iEnd Sub

1)若排序前数组元素a(1)a(5)分别是“23,86,98,65,2”,则单击按钮Command1后,数组元素a(1)a(5)分别是                  

2)题目代码采用了双重For循环嵌套结构,你能否将外层循环改成do循环结构。

3)题目代码是冒泡排序算法的一种实现方法,除此之外,你还能写出别的实现方式吗?(至少写出两种变例)




答案

1.【答案】C

【解析】本题考查冒泡排序和选择排序的区别。从题干排序可知为升序,冒泡排序的特征是只在相邻的元素间做交换操作,逐步把最小值交换到最左端,选择排序的特征是扫描待排序区间寻找最小值,并把它交换到最左端。


2.【答案】C

【解析】使用冒泡排序算法进行数组排序时,需从后向前将相邻的数组元素进行比较,若为逆序则进行交换,否则,不交换。本题中,第一遍排序后的结果为5.63,6.41,5.85,6.21,6.01在进行第二遍排序时,因为6.01<6.21,5.85<6.41,均需要进行交换,得到5.63,5.85,6.41,6.01,6.21。


3. 【答案】B

【解析】题目没有明确说是按降序还是升序排序,所以两种情况都有可能。若对“5、9、6、3、8”进行两遍降序冒泡排序,其结果为将最小的两个数前移至第一第二的位置,则①符合题意;若对“5、9、6、3、8”进行两遍升序冒泡排序,将最大的两个数前移至第一第二的位置,则④符合题意,故选项B正确。

4. 【答案】C

【解析】冒泡排序就是把小的元素往前调或者把大的元素往后调。10个数据第一遍加工后要比较9次。第二遍加工比较8次,依次类推。故需要比较的次数是9+8+7+6+5+4+3+2+1=45。

推广到n个数据的情形,总的比较次数为(n-1)+(n-2)+…+2+1=n*(n-1)/2次。

5.【答案】C

【解析】i=1时,第1趟扫描,发生了交换,flag=True,执行Next i,i的值为2;i=2时,第2趟扫描,发生了交换,flag=True,执行Next i,i的值为3;i=3时,第3趟扫描,未发生交换,flag= False,执行Exit For,结束循环。


6. 【答案】(12, 23, 65, 86, 98

2)参考代码:

Private Sub Command1_Click() Dim i As Integer, j As Integer, t As Integer i = n Do While i >= 2 For j = 1 To i - 1 If a(j) > a(j + 1) Then t = a(j): a(j) = a(j + 1): a(j + 1) = t Next j i = i - 1 LoopEnd Sub


3)可以采用向右扫描待排序区间,将最大值冒泡到最右端,再缩减右边界的方法。

参考代码1

Private Sub Command1_Click() Dim i As Integer, j As Integer, k As Integer, t As Integer For i = n To 2 Step -1 For j = 2 To i If a(j) < a(j - 1) Then t = a(j): a(j) = a(j - 1): a(j - 1) = t Next j Next iEnd Sub


也可以采用向左扫描待排序区间,将最小值冒泡到最左端,再缩减左边界的方法。

参考代码2

Private Sub Command2_Click() Dim i As Integer, j As Integer, k As Integer, t As Integer For i = 1 To n - 1 For j = n To i + 1 Step -1 If a(j) < a(j - 1) Then t = a(j): a(j) = a(j - 1): a(j - 1) = t Next j Next iEnd Sub


参考代码3

Private Sub Command3_Click() Dim i As Integer, j As Integer, k As Integer, t As Integer For i = 1 To n - 1 For j = n - 1 To i Step -1 If a(j) > a(j + 1) Then t = a(j): a(j) = a(j + 1): a(j + 1) = t Next j Next iEnd Sub


需要本文word版的,可以加入“选考VB算法解析”知识星球参与讨论和下载文件,“选考VB算法解析”知识星球汇集了数量众多的同好,更多有趣的话题在这里讨论,更多有用的资料在这里分享。

我们专注选考VB算法,感兴趣就一起来!



相关优秀文章:


以上是关于冒泡排序算法导学案的主要内容,如果未能解决你的问题,请参考以下文章

桶排序和索引排序算法导学案

四种排序算法实现

排序算法之冒泡选择插入排序(Java)

排序算法之冒泡选择插入排序(Java)

排序算法_冒泡排序(算法设计与C代码实现)

求八年级上册英语导学unit12 period2(sectionA 3a---4)答案