排序算法及程序实现 知识点题库

【加试题】实现某排序算法的部分VB程序代码段如下:

For i = 1 To 7

  For j = 8 To i+1 step -1

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

  tmp = sz(j): sz(j) = sz(j-1): sz(j-1) = tmp

End If

  Next j

Next i

数组元素sz(1)到sz(8)的原始数据依次为" 5.2,4.5,4.1,3.5,8.3,7.4,3.8,7.5"。则第3遍排序"加工"后数组元素sz(1)到sz(8)的数据依次是(   )

A . 3.5 3.8 4.1 5.2 4.5 7.4 7.5 8.3 B . 3.5 3.8 4.1 5.2 8.3 7.4 4.5 7.5 C . 8.3 7.5 7.4 3.5 5.2 4.1 3.8 4.5 D . 8.3 7.5 7.4 5.2 4.5 4.1 3.5 3.8
某超市面食区共有5种面食品种,其价格依次为6.20、4.5、5.5、2、3,若采用冒泡排序算法对其进行从小到大排序,则第二趟的排序结果是 (   )
A . 2  5.5  3  6.2  4.5 B . 2  3  6.2  4.5  5.5 C . 2  4.5  6.2  3  5.5 D . 2  3  5.5  4.5  6.2
【加试题】有如下 VB 程序段:

For i=1 to 3

    For j=1 to 5-i

        If a(j)>a(j+1) Then

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

        End If

    Next j

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

Next i

数组元素a(1)到a(5)的值依次为“3,9,6,8,4”。若该程序段执行后,文本框Text1显示的内容是(  )

A . 3 4 6 B . 6 8 9 C . 3 6 4 D . 3 6 6
【加试题】有如下VB程序段:

  S=“7218634594”:n=Len(s)

  t=0

  For i=1 To n-1

         a(i)=Val(Mid(s,i,2))

  Next i

  For i=1 To n-2 Step 2

       k=i

       For j=i+2 To n-1 Step 2

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

       Next j

       If k<>i Then

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

       End If

    Next i

    Text1.Text=Str(t)  
运行程序段后, t的值为(  )

A . 1 B . 2 C . 3 D . 4
将n个数分成偶数和奇数两部分,其中偶数在前奇数在后,要求分别对偶数和奇数进行升序排序。程序运行时,在文本框Text1中输入n,单击处理按钮Command1,分别在Text2、Text3中显示结果。程序运行效果图如图所示。

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

Dim a(1 To 100) As Integer

Sub sort(left As Integer,right As Integer)

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

For i=1 To right-left

For j=  '

If a(j)>a(j+1) Then

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

End If

Next j

Next i

End Sub

Private Sub Command1_Click()

Dim p As Integer,q As Integer

Dim i As Integer,j As Integer,n As Integer,x As Integer

Randomize

n=Val(Text1.Text):Text2.Text=″ ″:Text3.Text=″ ″

p=0

 '

For i=1 To n

x=Int(Rnd*100)

Text2.Text=Text2.Text+Str(x)

If x Mod 2=0 Then

   p=p+1

   a(p)=x

Else

   q=q-1

   a(q)=x

End If

Next i

Call sort(1,p)

Call sort(p+1,n)

For i=1 To n

Text3.Text=Text3.Text+Str(a(i))

Next i

End Sub

【加试题】某同学编写了一段模仿Excel的Rank排位函数VB程序,运行界面如图。程序功能如下:程序运行后先自动生成1000个取值范围在[1,100]的随机数(保留两位小数)并显示在List1中,在Text1和Text2中输入排序范围的起始位置和结束位置,在b(i)中存储a(i)在该范围中的排位,并输出排位到列表框List2,实现上述功能的VB程序如下,但加框处代码有错,请改正。

Dim a(1 To 1000) As Single, b(1 To 1000) As Integer Private Sub Form_Load()

Randomize    '生成 1000 个随机数 For i = 1 To 1000

       ①   '产生随机数,保留二位小数

   b(i) = 1                                           '初始排位为 1

   List1.AddItem "a(" & i & ")=" & a(i) Next i

End Sub

Private Sub Command1_Click()

Dim ks As Integer, js As Integer

ks = Val(Text1.Text)  

js = Val(Text2.Text)

For i = ks To js

  For j = ks To js

    If  Then b(i) = b(i) + 1         ②

  Next j

Text1  Text2

  List2.AddItem "a(" & i & ")" & "在 a(" & ks & ")~a(" & js & ")中排位为" & b(i) Next i

End Sub

 ② 

运动会田径比赛,记分裁判把各赛道运动员的成绩表交给录入员录入到计算机中,录入人员编制了如下程序。运行程序,按道次顺序依次输入8个成绩,道次号存放在数组a中,相应道次的运动员比赛成绩存放于数组b中,并将原始成绩显示在列表框List1 中。单击“成绩排序”按钮(Command1),将原始成绩从好到差排序,排序结果显示在列表框List2 中。运行效果如图所示。

实现上述功能的VB程序如下:

  1. (1) 请在划线处填入合适代码。

    Dim a(1 To 8)As Integer   ‘存储道次编号

    Dim b(1 To 8)As Single   ‘存储运动员成绩

    Dim num As Integer

    Private Sub Command1_Click()

    Dim i As Integer, j As Integer, k As Integer, p As Integer

    Dim t As Single

    For i=1 To 7

     k=i

     For j=i+1 To 8

      If    Then

        k=j

      End If

     Next j

    If k<>i Then

        p=a(i):a(i)= a(k):a(k)= p

        t=b(i):b(i)= b(k):b(k)= t

    End If

    Next i

    For i=1 To 8

    List2.AddItem Str(a(i))&“道:”& Str(b(i))

    Next i

    End Sub

    Private Sub Text1_KeyPress(KeyAscii As Integer)    ’按回车键录入比赛成绩

    Dim cj As Single

    If KeyAscii=13 Then  ‘是否为回车键

    num=num+1

    cj=Val(Text1.Text)

    If cj>0 And num<=8 Then

       a(num)= num

      

       List1.AddItem Str(a(num))&“道:”&Str(b(num))

    Else

      MsgBox “输入无效”

    End If

    Text1.Text=“”

    End If

    End Sub

  2. (2) 在Command1_Click( ) 事件过程中使用的排序算法是 (选填:冒泡/选择)排序。
【加试题】随机数排序程序。程序功能如下:窗体加载时生成[10,100]范围内的随机整数10个存储在数组a中,并在列表框List1中显示原始数据,单击“排序”按钮,这10个数据按降序排序后显示在列表框List2中。程序运行效果如图所示。实现上述功能的VB代码如下,但加框处代码有错,请改正。

Dim a(1 To 10) As Integer

Private Sub Command1 Click()

Dim i As Integer, j As Integer, x As Integer p = True

i = 1

    Do While i <= 9 And p p= False

    For j = 10 To i + 1 Step -1

        If  Then    '①

            k = a(j): a(j) = a(j - 1): a(j - 1) = k: p = True

        End If

    Next j

    i = i + 1

Loop

For i = 1 To 10

    List2.AddItem Str(a(i)) Next i

End Sub

Private Sub Form_Load()

Dim i As Integer

List1.Clear

Randomize         '初始化随机函数 Rnd

For i = 1 To 10

    a(i) =     '②

List1.AddItem

Str(a(i))

Next i

End Sub

 ② 

对数组元素d(1)到d(10)进行从小到大的排序其选择排序算法的VB程序段如下

For m=1 To 9

  p=m

  For n = m+1 To 10

               

  Next n

  If p<>m Then

    tt=(p): (p)=d(m): d(m)=tt

  End If

Next m

划线处的语句是(  )

A . If d(n)<d(p) Then p=m B . If d(n)<d(p) Then p=n C . If d(n)>(p) Then p=n D . If d(n)>d(p) Then p=m
某同学设计了一个排序算法,先将数组a中奇数位置的元素、偶数位置的元素分别进行排序,然后再进行后续处理,直至所有元素按降序排列。算法的VB程序段如下:

′待排序数据已存储在数组a中(a(1)~a(n))

For i = 1 To n - 2

k = i

For j =                ′①

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

Next j

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

Next i

For i = 1 To n \ 2

j = 2 * i - 1

If a(j) < a(j + 1) Then t = a(j): a(j) = a(j + 1): a(j + 1) = t

Next i

For i =                ′②

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

Do While t > a(j)

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

Loop

                      ′③

Next i

上述程序段中 3 处方框处的代码分别为 (   )

A . ①i+1 To n Step 2   ②2 To n Step 2    ③a(j+1)=t B . ①i+2 To n Step 2   ②3 To n Step 2    ③a(j+1)=t C . ①i+2 To n Step 2   ②2 To n Step 2    ③a(j)=t D . ①i+1 To n Step 2   ②3 To n Step 2    ③a(j)=t
有如下程序段:

For i= 1 To 2

    For j=5 To i+1 Step-1

      If a(j) >a(i) Then

        t=a(j):a(j)=a(i):a(i)=t

      End If

    Next j

Next i

数组元素a(1)到a(5)的值依次为“33,24,45,16,77”,经过该程序段“加工”后,数组元素a(1)到a(5)的值依次为(  )

A . 77,45,33,16,24 B . 77,33,45,16,24 C . 77,24,45,16,33 D . 77,45,33,24,16
有如下VB程序段

Const n=9

k = 1

For i = 1 To (n + 1) / 2 - 1

  For j = 1 To n - i * 2

    If a(j) * k < a(j + 2) * k Then

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

    End If

    k = -k

  Next j

Next i

For i = 1 To (n + 1) \ 2

  List2.AddItem Str(a(2 * i - 1))

Next i

已知数组元素 a(1)~a(9)分别是8、6、2、9、6、3、8、11、5,执行程序后list2输出的结果分别是(  )

A . 2  5  6  8  8 B .  8  8  6  5  2 C . 6  8  5  8  2 D .  2  6  6  8  9
某VB程序部分程序段如下:

For i = 1 To n - 1

For j=____________

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

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

End If

Next j

Next i

为了使此程序段能实现数组a中的数据升序排列,则划线处应填入的代码是(  )

A . 1 to n-i B . 2 to n-i+1 C . n to i+1 D . i+1 to n
AB两个篮球队进行了多场比赛,现在要统计比分并确定获胜球队。计分规则是胜场多的队伍获胜,若胜场相同,则计算累计小分(小分=本队得分-对手得分),小分多获胜,若还是相同,则算平局。小蓝同学根据上述算法编写了一个VB程序实现比赛结果统计。每场比分记录在文本框Text1中,单击“统计”按钮command1,把两队每场按AB两队比分差降序显示在列表框list1中,同时在文本框Text2输出最终结果。部分程序界面如图所示。

Private sub command1_click()

    Dim a(1 to 20) as integer,b(1 to 20) as integer,i as integer

    Dim j as integer,t as integer,p as integer,k as integer,xiaofen as integer

    ‘从文本框读取AB两队各场的比分分别存数组a、b,场次k,代码略

    For i=1 to k-1

        For j= 1 to      ①      

            If     ②        then

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

                t=b(j):b(j)=b(j+1):b(j+1)=t

            End if

        Next j

    Next i

    p=0 : xiaofen=0

    For i=1 to k

        If a(i)>b(i) then     ③      

        xiaofen = xiaofen+a(i)-b(i)

        List1.Additem str(a(i)) + “:”+ str(b(i))

    Next i

    If p*2>k or k=p*2 and xiaofen>0 then

        Text2.text = “A队获胜”

    Elseif  then

        Text2.text = “B队获胜”

    Else

        Text2.text = “两队平局”

    End if

End sub

  1. (1) 若希望程序在运行时列表框list1内容清空,则应该在代码中添加语句(单选,填字母:A . list1.additem \B . list1.clear \C . list1.caption )
  2. (2) 在程序划线处填入合适代码,使程序完整

     ② ③ 

  3. (3) 加框处代码有错误,请改正。
有如下 VB 程序段 :

m = a(1) : s = 0

For i = 2 To 5

    If a(i) > m Then m = a(i)

    s = s + m

Next i

数组元素a(1)到a(5)的值依次为“1,3,4,2,3”,执行该程序段后,变量s的值为(   )

A . 7 B . 12 C . 13 D . 15
有一个整数数列(长度为n),数值的规律为先升序,后相等,最后降序。如3,6,18,18,10,9,8,7,5,现要找到升序的终点位置,即第一个18所在的位置3,将数列依次存入数组a,部分程序如下:

i=1: j=n

Do While i<=j

    m=(i +j)\2

    If  Then

        i= m+1

    Else

        j=m- 1

    EndIf

Loop

Text1.Text=

若要实现上述功能,方框处的代码应是(  )

A . a(m - 1) <= a(m)  Str(j) B . a(m - 1) < a(m)      Str(j) C . a(m - 1) <= a(m)  Str(i) D . a(m - 1) < a(m)     Str(i)
有如下程序段:

For i=1 To 3

    For j=i+1 To 7

        If a(j)< a(i) Then

            k= a(j): a(j)= a(i): a(i)=k

            c=c+1

        End If

    Next j

    s= Str(a(i))+s

Next i

Text1.Text=Str(c) & ":" & s

数组元素a(1)至a(7)中值分别为3,9,1,5,8,6,2,该程序段运行后,文本框Text1中显示的内容是(   )

A . 5:6 8 9 B . 3:9 8 6 C . 3:1 2 3 D . 5:3 2 1
有如下VB程序段:

m= Int(Rnd*3+1)*2

For i=1 To 6-m

    For j=6 To i+ 1 Step-1

        If a(j)<a(j- 1)Then t= a(j): a(j)= a(j- 1);a(j- 1)=t

    Next j

Next i

数组元素a(1)到a(6)的值依次为"98,67,3, 81,38,21", 执行该程序段后,a(1)~a(6)各元素值不可能是(    )

A . 3,98,67,21,81,38 B . 3,21,98,67,38,81 C . 3,21,38,67,98,81 D . 98,67,3,81,38,21
有如下VB程序段:

'生成6个随机正整数,依次存入数组元素a (1)到a (6)中

For i=1 To 2

  For j=6 To i+1 Step-1

    If a(j) Mod 2>a(j-1) Mod 2 Then

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

    End If

  Next j

Next i

执行上述程序段后,a (1)到a (6)各元素值依次为3,1,4,3,7,6,下列选项不是排序前a(1)到a(6)各元素值依次元素值的(    )

A . 3,1,4,3,6,7 B . 4,3,1,3,6,7 C . 3,4,1,3,6,7 D . 4,3,1,3,7,6
把数组元素d(1)到d(n)中前5个不同的最大值降序排到d(1)到d(5)中,其中n≥10,数组d中各元素值均小于100且不同元素个数大于5。实现该功能的VB程序段如下:

d(0) = 100

For i = 1 To 5

    k = i

    For j = i + 1 To n

        If d(j) < d(i - 1) Then

            If    ①    Then k = j

        End If

    Next j

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

Next i

则代码中①处的语句为(     )

A . d(k) >= d(i - 1) And d(j) < d(k) B . d(k) >= d(i - 1) Or d(j) < d(k) C . d(k) >= d(i - 1) And d(j) > d(k) D . d(k) >= d(i - 1) Or d(j) > d(k)