VB_Python代码对照算法百题(008)

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]

=======================

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180910G06J9U00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励