首先将5取出,得到序列5;
第二步将2取出,插入序列得到2,5;
第三步将9取出,插入后得到2,5,9;
第四步将5取出,插入后得到2,5,5,9;
第五步将3取出,插入后得到2,3,5,5,9,排序完成。
小吴对这种插入排序进行了一些改进,将无序数列存入a数组中,将排序后的数据存入b数组中,同时保证b数组不存在重复的数字。对于重复出现的数字,用cnt数组记录重复个数。例如无序数列8、6、7、4、4、9、1、9、9、8,a(1)~a(10)存储原数据,b(1)~b(6)存储排序后的不重复数据,cnt(1)~cnt(6)存储每个数字重复的个数,如图a所示。
数组/下标 |
1 |
2 |
3 |
4 |
5 |
6 |
b |
1 |
4 |
6 |
7 |
8 |
9 |
cnt |
1 |
2 |
1 |
1 |
2 |
3 |
图a
程序运行后,自动随机生成原数组并显示在列表框List1中,点击按钮“开始”后,生成升序排序数组并显示在列表框List2中,程序运行界面如图b所示。
图b
请回答下列问题。
Const n = 10
Dim a(0 To 100) As Integer, b(0 To 100) As Integer, cnt(1 To 100) As Integer
Dim Ln As Integer, pos As Integer 'Ln表示b数组的长度
Function search(key As Integer)
Dim i As Integer
For i = 1 To Ln
If b(i) >= key Then Exit For
Next i
search = i
End Function
Private Sub Command1_Click()
Dim i As Integer, j As Integer
Ln = 0
For i = 1 To n
pos =
If b(pos) <> a(i) Then
Ln = Ln + 1
j = Ln
Do While j > pos
b(j) = b(j - 1)
j = j - 1
Loop
b(j) = a(i)
cnt(pos) = 1
Else
End If
Next i
For i = 1 To Ln
For j = 1 To cnt(i)
List2.AddItem Str(b(i))
Next j
Next i
End Sub
Private Sub Form_Load()
For i = 1 To n
a(i) = Rnd() * 10 + 1
List1.AddItem Str(a(i))
Next i
End Sub