以下代码是用选择法为随机产生的10个数字排序:
Private Sub Command1_Click()
Dim a(1 To 10) As Integer
For i = 1 To 10
a(i) = Int(Rnd * 10)
Print a(i);
Next i
Print
For i = 1 To 9
For j = i + 1 To 10
If a(i) > a(j) Then
t = a(i): a(i) = a(j): a(j) = t
End If
Next j
Print a(i);
Next i
Print a(i);
End Sub
书中写的是:(1)从n个数中选出最小数的下标,出了循环,将最小数与第一个数交换位置;
(2)除第一个数外,在剩下的n-1个数中再按方法(1)选出次小的数,与第二个数交换位置;
(3)以此类推,最后构成递增序列。
请问这个过程中到底哪一步怎样实现的从n个数中选出最小数,有点不太明白,请帮忙解释下,谢谢!
举个例子麻烦大家解释下:
例如 5 3 2 7这四个数进行降序排列,那么两者比较如果后者小于前者则交换位置
一共进行三轮排序,第一轮中,首先3<5,二者交换位置,变成3 5 2 7,之后3和2相比,再交换位置,最后变成2537,这样思考正确吗?谢谢!还有为什么书上只说将最小数与第一个数交换位置,那样第一轮结束后不就应该是2 3 5 7了吗?
Private Sub Command1_Click()
Dim a(1 To 10) As Integer
For i = 1 To 10
a(i) = Int(Rnd * 10)
Print a(i);
Next i
'以上十随机得出10个数
For i = 1 To 9 '这里开始是双重循环
For j = i + 1 To 10
If a(i) > a(j) Then '如果前一个数大于后一个数则交换位置
t = a(i): a(i) = a(j): a(j) = t
End If
Next j
Print a(i);
Next i
Print a(i);I等于1时 就是拿第一位和第二位比较 比较大的的数排后面 然后比较第一位和第三位 For j = i + 1
To 10 直到比较到最后一位
i=2 时也是如此 循环9次就完成排序5 3 2 7
i=1 时
J=2时 3 5 2 7
J=3时 2 5 3 7
j=4时 2 5 3 7
I=2时
j=3时 2 3 5 7扩展资料
Private Sub Command1_Click()
Dim a(10) As Integer
Dim b As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer
For i = 1 To 10
a(i) = Int(Rnd * 90 + 10)
Print a(i);
Next i
PrintFor i = 1 To 9
k = i
For j = k + 1 To 10
If a(j) < a(k) Then k = j
Next j
If a(i) > a(k) Then
b = a(i)
a(i) = a(k)
a(k) = bEnd If
Next iFor i = 1 To 10
Print a(i);Next i
参考资料:百度百科 - 选择法排序