当前位置: 高中信息技术 / 综合题
  • 1. (2019高三上·杭州期中) 对k(k<=100)个数据进行排序时,可以利用一种排序方式进行处理,算法如下:

    ①每次将第i个数据和第2*i以及第2*i+1个位置的数据进行比较,将较大值交换到第i个位置上;

    ②从数组的第i(未排序数据个数一半位置)个位置重复步骤①一直比较到最前面,这样就可以将最大值交换到第1个位置;

    ③最终将1号位置上的值与未排序数据的最后一个进行交换,得到最大值;

    ④反复执行①②③三个步骤就可以将数据按升序排序;

    过程如下图所示,其中a(1)=11,a(2)=25,a(3)=52,a(4)=39,a(5)=46,开始比较的位置从i=k\2个位置开始:

    第一次排序过程:

    步骤①:

    步骤②:

    步骤③:

    第二次排序过程:

    现要求在文本框Text1中输入一个整数k,对k个随机生成的两位奇数按上述排序方法进行排序,代码和程序运行界面如下所示,请在划线处填入合适的代码,并且在加框处代码有错误,请改正:

    Dim a(1 To 100) As Integer

    Dim k As Integer

    Private Sub Command1_Click()

        Dim i As Integer

        k = Val(Text1.Text)

        Randomize

        For i = 1 To k

            a(i) =     ①   

            List1.AddItem Str(a(i))

        Next i

    End Sub

    Private Sub Command2_Click()

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

        For i = 1 To k - 1

            For j = To 1 Step -1

                If Not judge(i, j) Then

                    If      ②     Then

                        t = a(j): a(j) = a(2 * j): a(2 * j) = t

                    Else

                        t = a(j): a(j) = a(2 * j + 1): a(2 * j + 1) = t

                    End If

                End If

            Next j

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

        Next i

        For i = 1 To k

            List2.AddItem Str(a(i))

        Next i

    End Sub

    Function judge(t As Integer, s As Integer) As Boolean

            ③    

        If a(s) > a(2 * s) And a(s) > a(2 * s + 1) Or a(s) > a(2 * s) And 2 * s > k - t Then

            judge = True

        End If

    End Function

    根据以上代码回答问题:

    1. (1) 如果现有数据a(1)=27,a(2)=12,a(3)=33,a(4)=78,a(5)=61,完成一次排序之后a(2)的值是
    2. (2) 加框处代码有错误,则正确的是
    3. (3) 请将划线处补充完整

       ② ③ 

微信扫码预览、分享更方便