vb 数字升序排列问题

来源:百度知道 编辑:UC知道 时间:2024/09/20 16:33:35
谢谢大大快救偶~~有时成功有时失败~~
实时错误~“9”
下标越界~的原因是什么
Private Sub Form_Click()
Const n = 5
Dim a(1 To n), i%, j%, k%, t%
k = 0
Randomize
For i = 1 To n
a(i) = Int(Rnd * 90) + 10
Print a(i);
Next i
For i = 1 To n - 1
k = k + 1
For j = i + 1 To n
If a(j) < a(k) Then k = j
Next j
t = a(i): a(i) = a(k): a(k) = t
Next i
Print
For i = 1 To n
Print a(i);
Next i
End Sub
实时错误~“9”
下标越界~的原因是什么

你的k=k+1有问题,有时可以有时不可以是看数据中最小的数是不是最后一个,因为如果最后一个数据是最小的,即a(5)是最小的,那么第一次if语句结束时k=5,可是你有k=k+1语句,这样下一次的if判断时k就变6了,而a(6)肯定是越界了!
并且你说的有时可以的次数应该很少的,没越界并且排序是正确的情况必须是本身数据已经是从小到大排好了,否则即使没越界数据排序也是有问题的,具体原因自己琢磨一下就知道了,正确答案就像前辈写的那样把if判断那改成:
For i = 1 To n - 1
For j = i + 1 To n
If a(j) < a(i) Then
t = a(i): a(i) = a(j): a(j) = t
end if
Next j
Next i

For i = 1 To n - 1
For j = i + 1 To n
If a(j) < a(i) Then
t = a(i): a(i) = a(j): a(j) = t
end if
Next j
Next i