1. 下面是一个采用拉锯式排序法对数组元素按升序进行排序的程序,所谓“拉锯式排序法”是这一遍把最小的元素从下往上移动到最上面的位置,下一遍则是从上往下把最大的元素移动到最下面的位置。 程序运行效果如下图所示。

Private Sub Command1_Click()

    Dim a(10) As Integer, i As Integer

    Randomize ′产生不同的随机数

    For i = 1 To 10

        a(i) = Int(Rnd * 100) + 1

        Text1.Text = Text1.Text & Str(a(i))

    Next i

    Call Shaker_sort(a())     '调用Shaker_sort

    For i = 1 To 10

        Text2.Text = Text2.Text & Str(a(i))

    Next i

End Sub

Private Sub Shaker_sort(k() As Integer)

    Dim i As Integer,c As Integer,d As Integer

    Dim t As Integer

    c = 1

    d = 10

    Do While c<=d

        For i=     '从下往上把最小的元素移到最上面的位置

            If k(i-1)>k(i) Then

                t = k(i - 1):k(i- 1) = k(i):k(i) = t

            End If

        Next i

        For i = c+1 To d-c    '从上到下把最大的元素移到最下面的位置

            If  Then

                t = k(i+1):k(i+1) = k(i):k(i) = t

            End If

        Next i

        c = c + 1

        

    Loop 

End Sub

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

您现在未登录,无法查看试题答案与解析。 登录
综合题 普通
能力提升
变式训练
拓展培优
真题演练
换一批
1. 对一个n×n的矩阵以“行”为单位进行升序排序,如下表所示是一个4×4的矩阵以行为单位进行升序排序。

李华编写了实现上述功能的程序,程序功能如下:程序运行时,在文本框Text1中输入n(1<=n<=10)单击“产生”按钮Command1产生n×n个随机数,随机数的范围为[0,9],随机存储在数组a中,并以矩阵的形式在列表框List1上显示。单击“排序”按钮Command2,对矩阵以“行”为单位进行升序排序,并在列表框List2输出排序后的矩阵。在程序运行界面如下图所示。

实现上述功能的VB程序如下,请在划线处填入合适的代码。

Dim n As Integer

Dim a(1 To 100) As Integer

Private Sub Command1_Click( )

    Dim i As Integer, s As String

    s = ""

   

    For i = 1 To n * n

        

        s = s + Str(a(i))

        If i Mod n = 0 Then

            List1.AddItem s

            s = ""

        End If

    Next i

End Sub

Private Sub Command2_Click()

    Dim i As Integer, j As Integer, t As Integer

    Dim s As String

    s = ""

    For i = 1 To n * n

        k = i

        For j = i + 1 To

            If a(j) < a(k) Then k = j

        Next j

        If k <> i Then t = a(k):a(k) = a(i):a(i) = t

       

        If i Mod n = 0 Then

            List2.AddItem s

            s = ""

        End If

    Next i

End Sub

综合题 普通
3. 小王编写了一个数据排序且将重复数删除的VB程序。算法的基本思想:先随机生成20个[1,50]区间内的整数,然后按照数据从低到高进行排序,最后删除重复数(相同的数据只保留一个)。

程序运行时,单击“生成随机数”按钮Command1,则生成20个[1,50]区间内的整数,存储在数组a中,并显示在文本框Text1中;单击“排序并去重”按钮Command2,则将数组a中数据进行从低到高排序,并将排序结果显示在文本框Text2中,将去重后结果显示在文本框Text3中,在标签Label4中显示共删除的重复数个数,程序运行界面如下图所示。

实现上述功能的VB程序如下,请回答下列问题:

(1) 若20个随机数分别为:7,18,5,7,7,12,7,1,10,14,17,7,9,7,10,16,5,18,8,18,则去掉的重复数共个。
(2) 请在划线处填入合适的代码。

Dim a(1 To 20) As Integer

Const n = 20

Private Sub Command1_Click()

    Dim i As Integer, s1 As String

    Randomize

    s1 = “ ”

    For i = 1 To n

        a(i) = Int(Rnd * 50 + 1)

        s1 = s1 + Str(a(i))

    Next i

    Text1.Text = s1

End Sub

Private Sub Command2_Click()

    Dim i As Integer, j As Integer, p As Integer, tt As Integer

    Dim ans As Integer, s2 As String, s3 As String

    For i = 1 To n - 1

        p = i

        For j = n To i + 1 Step -1

            If a(j) < a(p) Then p = j

        Next j

        If a(i) < > a(p) Then

            tt = a(i)

            a(i) = a(p)

            a(p) = tt

        End If

    Next i

    s2 = “ ”:s3 = “ ”

    ans = 0

    For i = 1 To n

        s2 = s2 + Str(a(i))

    Next i

    Text2.Text = s2

   

    s3 = Str(a(1))

    For i = 2 To n

    If a(i) < > q Then

        

        q = a(i)

    Else

        

    End If

    Next i

    Text3.Text = s3

    Label4.Caption = Str(ans)

End Sub

综合题 困难