当前位置:文档之家› 冒泡法排序(变形与优化)

冒泡法排序(变形与优化)

冒泡法排序(变形与优化)
班级:姓名:
1.有如下VB程序段:
For i=1 To 3
For j=I To 5
If a(j)<a(j+1) Then
k=a(j):a(j)=a(j+1):a(j+1)=k
End If
Next j
List1.AddItem Str(a(i))
Next i
数组元素a(1)到a(6)的数据依次为“1,5,7,6,9,3”,经过该程序段加工后,列表框List1中显示的内容是( )
A.9 7 6 B.5 7 9
C.5 7 9 6 3 1 D.9 7 6 5 3 1
2.有如下程序段:
For i=1 To 2
For j=1 To 6﹣i
If a(j)<a(j+1 ) Then
k=a(j):a(j)=a(j+1):a(j+1)=k
End If
Next j
Next i
数组元素a(1)到a(6)的值依次为“71,54,58,29,31,78”,经过该程序段“加工”后,数组元素a(1)到a(6)的值依次为( )
A.29,31,54,58,71,78
B.78,71,58,54,31,29
C.54,29,31,58,71,78
D.71,58,54,78,31,29
3.使用VB程序解决问题:有n个整数存储在a数组,将其中的奇数转存到b数组中,并将b 数组从小到大排序.部分程序如下:
t=0
For i=1 To n
If a(i) Mod 2=1 Then
t=t+1
End If
Next i
For i=1 To t﹣1
For j=t To i+1 Step ﹣1
If b(j)<b(j﹣1)Then
temp=b(j)
b(j)=b(j﹣1)
b(j﹣1)=temp
End if
Next j
Next i
方框中应填写的正确语句是( )
A.b(i)=a(i) B.b(i)=t
C.b(t)=a(i) D.b(t)=a(t)
4.在冒泡排序时,当某一遍加工过程中没有数据交换,说明数据已经有序,无须进一步加工.为此小明对冒泡排序进行了优化,编写了一个VB程序,功能如下,运行程序时,在列表框List1中显示随机产生的n个整数,单击“排序”的按钮Command1,在列表框List2中显示降序排序后的结果,运行的效果如图所示.
实现上述功能的VB代码如下,但加框处代码有错,请改正.
Const n As Integer=10
Dim a(1 To n) As Integer
Private Sub Form_Load()
Dim I As Integer
Randomize
For i=1 To n
a(i)=Int(Rnd*100)
List1.AddItem Str(a(i))
Next i
End Sub
Private Sub Command1_Click()
Dim tmp As Integer,i As Integer
Dim j As Integer,k As Integer
For i=1 To n-1
k=0
For j=n To i+1 Step -1
If a(j)>a(j-1) Then
k=k+1
End If
Next j
Next i
For i=1 To n
List2.AddItem Str(a(i))
Next i
End Sub
5.某网站将所有申请的用户名进行升序排序,排序要求如下:
①字母a最小,z最大,不区分大小写,将大写字母转换为小写进行比较;
②若第1个字母一样,则比较第2个字母,依此类推;
③例如:“ican”大于“dcan”;“Ican”大于“dcan”;“Icando”大于“Ican”.编写程序,程序运行界面如图所示.
(1)框内网站用户名排列的算法属于.
(2)实现上述功能的VB程序如下,请在划线处填入合适代码.
‘存储数据库中所有用户名,最大处理个数10000
Dim strk(1 To 10000) As String
Dim maxs As Integer ‘存储当前数据库中实际用户数
Private Sub Form_Load()
‘本程序用于读取数据库中所有用户名,并存储在数组strk中
‘计算数据库实际用户数,并存储在变量maxs中
‘代码略
End Sub
‘比较字符串s和s2的大小
Function Compare(s As String,s2 As String) As Integer
Dim ch As String,ch2 As String
Dim flag As Integer,lenx As Integer
flag=-2 ‘两比较字符串有空串
If Len(s)>0 And Len(s2)>0 Then
i=1
If Len(s)>Len(s2) Then
lenx=Len(s)
Else
lenx=Len(s2)
End If
flag=0 ‘假定两字符串相等
Do While
ch=Mid(s,i,1)
ch2=Mid(s2,i,1)
If ch>=”A” And ch<=”Z” Then
ch=Chr(Asc(ch)+32)
End If
If ch2>=”A” And ch2<=”Z” Then
ch2=Chr(Asc(ch2)+32)
End If
If ch > ch2 Then
flag=1
ElseIf ch < ch2 Then
flag=-1
End If
i=i+1
Loop
End If
Compare=
End Function
Private Sub Command1_Click()
Dim i As Integer,st As String
List1.AddItem strk(i)
Next i
End Sub。

相关主题