VB_Python代码对照算法百题(008)
算法:冒泡排序
VB代码:
(2016年10月_浙江)16.小吴为了研究冒泡排序过程中数据的“移动”情况,编写了一个VB程序,功能如下:在列表框List1中显示排序前数据(存储在数组a中),在文本框Text1中输入初始位置(即下标值),单击“排序”按钮Command1后,在标签Label1中显示指定初始位置的数据在排序过程中的位置变化情况,排序后的数据显示在列表框List2中。程序运行界面如图所示。
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Dim a(1 To 8) AsInteger
Dim n As Integer
Private SubForm_Load()
a(1) = 30: a(2) = 47: a(3) = 30: a(4) = 72
a(5) = 70: a(6) = 23: a(7) = 99: a(8) = 24
n = 8
For i = 1 To 8
List1.AddItem a(i)
Next i
End Sub
Private SubCommand1_Click()
Dim i As Integer, j As Integer, k As Integer
Dim pos As Integer
Dim s As String
s = Text1.Text
pos = Val(Text1.Text)
For i = 1 To n - 1
For j = n To i + 1 Step -1
If a(j)
k = a(j)
a(j - 1) = a(j)
a(j) = k
'如果pos位置的数据参与交换,则更新pos值,记录pos变化位置
If pos = j Then
pos = j - 1
s = s + "→" + Str(pos)
Else
pos = j
s = s + "→" + Str(pos)
End If
End If
Next j
Next i
Label1.Caption = "位置变化情况:"+ s
For i = 1 To n
List2.AddItem Str(a(i))
Next i
End Sub
参考答案:
(1)k=a(j-1)
(2)ElseIf pos = j - 1 Then
解析:交换变量a(j)和a(j-1)的值,首先需要将数组元素a(j - 1)中的值存储到变量k中,再将数组元素a(j)中的值存储到数组元素a(j - 1)中,覆盖原来的值,所以首先需要将数组元素a(j - 1)中的值转存,最后将变量k中值存储到数组元素a(j)中,即实现了交换。
交换变量a(j)和a(j- 1)的值后,两个数组元素中数据位置发生变化,接下来判断这两个元素的下标和pos值的关系,有三种情况,第一种是pos和j相同,已经被交换到j-1位置,pos需要更新;第二种如果pos和j-1相同,已经被交换到j位置,pos需要更新,第三种情况pos和j及j-1均不同,即此次交换不涉及到pos位置,无需做任何处理,所以在判断的时候,不能直接使用“Else”,而是要写明条件,即“ElseIf pos = j - 1 Then”。
1.通过题干描述,分析清楚算法思想,即该算法要做什么,并划出解题的主要关键词,例如此题中“数据的“移动”情况”;2.注意观察执行界面中提供的信息,例如界面中“位置变化情况:5→6→7→6”,以实例给出的位置5为例,进行分析,尽量能够得出其变化规律。3.在块IF语句书写时,要注意“ElseIf”是一个关键词,不能写成“Else If”,即不分开写;条件后应书写“Then”。
Python代码:
a=[30,47,30,72,70,23,99,24]
n=len(a)-1
print('排序前',a)
s=input('初始位置为:\n')
pos=int(s)
for i in range(n):
for j in range(n,i,-1):
if a[j]
a[j],a[j-1]=a[j-1],a[j]
if pos==j:
pos =j-1
s=s+'→'+str(pos)
elif pos==j-1:
pos=j
s = s + "→" +str(pos)
print('位置变化情况:'+s)
print('排序后:',a)
Python代码运行结果:
排序前 [30, 47, 30, 72, 70, 23, 99,24]
初始位置为:
4
位置变化情况:4→5→6→5
排序后: [23, 24, 30, 30, 47, 70,72, 99]
=======================
领取专属 10元无门槛券
私享最新 技术干货