1. n个数据的冒泡排序需要经过n-1遍的加工,每一遍加工都自下而上比较相邻的两个数据,把较小者交换到上面,在第i遍加工过程中需要进行n-i对数据的比较。在某些情况下,第i遍加工过程中,在上面部分较小的数据已经有序的情况下,不需要再进行n-i对数据的比较,如对“17,18,19,24,23,20”这6个数据排序时,第1遍排序结束后的数据为“17,18,19,20,24,23”,那么第2遍排序时就不再需要对20及其前面3个数据进行比较。以下程序实现了冒泡排序的优化,其程序运行界面如图所示,但加框处代码有误,请改正。

Dim n As Integer

Dim a(1 to 10)As Integer

Private Sub Form_Load( )

    ‘n=10,排序前生成的数据存储在数组a中,并在列表框List1中显示

    ‘代码略

End Sub

Private Sub Command1_Click( )

    Dim i,j As Integer

    Dim start As Integer

                           ‘①

    Do While i<n

        start=n

        For j=n To i Step-1

            If a(j)<a(j-1)Then

                t=a(j):a(j)=a(j-1):a(j-1)=t

                start=j

            End If

        Next j

                    ‘②

    Loop

  For i=1 To n

      List2.AddItem Str(a(i))

  Next i

End sub

以上程序段运行时,为了实现上述功能,加框处代码应改正为:①;②

【考点】
排序算法及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
填空题 普通
能力提升
变式训练
拓展培优
真题演练
换一批
2. 【加试题】某排序算法思想如下:若有11个桶,编号从0~10,随机产生多个整数,每产生一个整数时,就在以该整数位编号的桶中放一面小旗子,最后只要按顺序数每个桶中有几面小旗子,就能得到这几个整数的有序排列。例如2号桶中有1个小旗子,表示2出现了一次;3号桶中有1个小旗子,表示3出现了一次;5号桶中有2个小旗子,表示5出现了两次;8号桶中有1个小旗子,表示8出现了一次,按桶的编号顺序读出旗子数量,没有旗子的桶略过,得到有序整数为“2,3,5,5,8”。

为此,小李编写了一个VB程序,功能如下:运行程序,窗体加载时随机产生6个[0,9]的随机整数,并在列表框List1中依次显示排序前数据,单击“排序”按钮Command1,在列表框List2 中显示经过上述排序算法后的数据。运行结果如图所示。

实现上述功能的VB代码如下,但横线处代码有错,请改正。

Dim a(10) As Integer'数组a表示桶的编号,如a(0)表示第0号桶

Private Sub Command1_Click()

Dim i As Integer, j As Integer

For i = 0 To 10

For j = 1 To     i      错①处

List2.AddItem CStr(i)

Next j

Next i

End Sub

Private Sub Form_Load()

Dim i As Integer

Randomize

For i = 0 To 10'将数组初始化为0

a(i) = 0

Next i

For i = 1 To 6'产生6个[0,9]的随机数

t = Int(Rnd * 10)

a(t) =  t + 1  '第t桶中小旗子数量加1  错②处

List1.AddItem CStr(t)

Next i

End Sub

 ② 

填空题 困难