以下代码是用选择法为随机产生的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个数中选出最小数,有点不太明白,请帮忙解释下,谢谢! 举个例子麻烦大家解释下: 例如 423817这六个数进行降序排列,那么两者比较如果后者小于前者则交换位置 一共进行5轮排序,第一轮中,首先2<4,二者交换位置,变成243817,之后1和2相比,再交换位置,最后变成143827,这样思考正确吗?谢谢!还有为什么书上只说将最小数与第一个数交换位置,那样第一轮结束后不就应该是123847了吗? 新手分数不多,谢谢!!!
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 这一段代码是选出最小数For i = 1 To 9 是选9轮。 每一轮参与比较的数的个数是不同的,第i轮有n-i个数参与比较。按照你的例子,你的理解是对的。第一轮结束后应该是143827.最小的数放到了第一位。第二轮从第二位开始,先是4和3交换,变成134827,然后2和3交换,第二轮结束变成124837,第三轮从第三位开始。。。。