最新消息:

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

Python 少儿编程 1461浏览 0评论

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

算法:冒泡排序

VB代码

(2016年10月_浙江)16.小吴为了研究冒泡排序过程中数据的“移动”情况,编写了一个VB程序,功能如下:在列表框List1中显示排序前数据(存储在数组a中),在文本框Text1中输入初始位置(即下标值),单击“排序”按钮Command1后,在标签Label1中显示指定初始位置的数据在排序过程中的位置变化情况,排序后的数据显示在列表框List2中。程序运行界面如图所示。

 

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

实现上述功能的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) < a(j – 1) Then

    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-1]:

            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]

>>> 

文件夹。欢迎下载!欢迎投稿!

您必须 登录 才能发表评论!