冒泡排序算法导学案
Posted Python算法之旅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序算法导学案相关的知识,希望对你有一定的参考价值。
冒泡排序算法导学案
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 Integer
Dim flag As Boolean 'flag标记是否发生了交换操作
i = 1
For 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 For
Next i
数组元素a(1)到a(5)的值依次为“48,36,24,97,77” ,经过该程序段“加工”后,变量i的值是( )
A. 1 B. 2 C. 3 D. 4
6. 某程序代码如下:
Const n = 5
Dim a(1 To n) As Integer
Private 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 i
End 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. 【答案】(1)2, 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
Loop
End 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 i
End 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 i
End 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 i
End Sub
需要本文word版的,可以加入“选考VB算法解析”知识星球参与讨论和下载文件,“选考VB算法解析”知识星球汇集了数量众多的同好,更多有趣的话题在这里讨论,更多有用的资料在这里分享。
我们专注选考VB算法,感兴趣就一起来!
相关优秀文章:
以上是关于冒泡排序算法导学案的主要内容,如果未能解决你的问题,请参考以下文章