排序的稳定性。假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j], 且r[订]在r[j]之前, 而在排序后的序列中,r[i]仍在r[j]之前,则称这种撸序算法是稳定的:否则称为不稳定的。现编写一个VB程序,实现功能如下:随机生成n-1个不重复的[10, 99]之间的正整数,在这n-1正整数中随机选取一个位置i,将其值r[i]作为第n个数插入到某一位置j处,然后对数据序列进行排序,验证排序前和排序后这两个相同数相对次序的变化,著均不变,则排序稳定,若有改变,则排序不稳定。实现该功能的VB程序及界面如下,请回答以下问题。
Const n = 10 Dim a(1 To 10) As Integer, b(1 To 10) As Integer Dim k1 As Integer, k2 As Integer 'k1,k2为相同数据的前、后次序 Private Sub Command1_Click () Dim i As Integer, tmp As Integer, t As Integer Randomize List1.Clear For i = 1 To 9 '随机生成9个不重复数 b(i) = Int(Rnd * 90) + 10 Do While ① b(i) = Int(Rnd *90) + 10 Loop Next i '以下代码为随机选取数组中的1个数作为第10个数字再随机的插入到原数组的1-9位置 K1 = Int(Rnd *9 + 1) tmp = b(k1) k2 = Int(Rnd* 9 + 1) For i=10 To k2+1 Step -1 b(i)=b(i-1) Next i b(k2) = tup For i =1 To n a(i) = i List1. AddItem Str(a(i)) +””+ Str(b(i)) Next i If k1 >= k2 Then ② t =k1: k1=k2: k2=t End If Text1. Text = Str(k1) + Str (k2) End Sub Private Sub Command2 _Click () Dim i As Integer, j As Integer, k As Integer, t As Integer List2. Clear For i=1 To n-1 k=i For j=i +1 To n If b(j) < b(k) Then k= j Next j If k<>i Then t=a(k): a(k)=a(i): a(i)=t t=b(l): b(k)=b(i): b(i)=t End If Next i For i= 1 To n List2.AddItem Str (a(i)) +"" + Str (b(i)) Next i i=1 Do While i<=n-1 And b(i)< b(i+1) i=i+1 Loop Text2.Text = Str(a(i)) + Str(a(i + 1)) If ③ Then Label1. Caption="稳定" Else Label1. Caption ="非稳定" End Sub Function check(x As Integer, y As Integer) As Boolean Dim j As Integer check = False For j= 1 To y-1 If b(j)=x Then check = True Exit For End If Next j End Function
(1)
分析程序代码,若某次运行显示“稳定”,则是否能确定选择排序是稳定排序?(填:是/否)
(2)
补充横线处完整代码
① ② ③
答案: 【1】否
【1】check(b(i), i)【2】k1 = k1 + 1【3】a(i) = k1