动态数组问题

laichunlin 2010-11-29 04:47:57
我写的vb程序要求是输入N个整数然后用冒泡法排序后输出
冒泡排序输出没问题,我现在的问题是排序后输出的是原来的数组序列
不知我这段代码错在哪了,还望各位大侠帮帮忙!

Dim n As Integer, i As Integer, j As Integer, k As Integer, temp As Integer
Dim arr() As Variant
Print "原来顺序"
n = InputBox("请输入整数个数", "整数个数", "3")
ReDim arr(1 To n) As Variant
For i = 1 To n
arr(i) = InputBox("输入" & n & "个整数", "输入数据", "0")
Print arr(i);
Next i
Print
Print "排序后:"

For j = 1 To n - 1
For k = 1 To n - j
If arr(k) > arr(k + 1) Then
temp = arr(k): arr(k) = arr(k + 1): arr(k + 1) = temp
End If
Next k
Next j

For i = 1 To n
Print arr(i);
Next i
...全文
104 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hztltgg 2010-11-30
  • 打赏
  • 举报
回复
vb6的,不是vb.net

Dim n As Integer, i As Integer, j As Integer, k As Integer, temp As Integer
Dim arr() As Integer
Print "原来顺序"
n = cint(InputBox("请输入整数个数", "整数个数", "3"))
ReDim arr(1 To n) As Integer
For i = 1 To n
arr(i) = cint(InputBox("输入" & n & "个整数", "输入数据", "0"))
Print arr(i);
Next i
Print
Print "排序后:"

For j = 1 To n - 1
For k = 1 To n - j
If arr(k) > arr(k + 1) Then
temp = arr(k): arr(k) = arr(k + 1): arr(k + 1) = temp
End If
Next k
Next j

For i = 1 To n
Print arr(i);
Next i
QQRN 2010-11-30
  • 打赏
  • 举报
回复
的确是字符串造成的
你可以改为
Dim arr() As Integer '<-
Print "原来顺序"
n = InputBox("请输入整数个数", "整数个数", "3")
ReDim arr(1 To n) '<-

chinaboyzyq 2010-11-30
  • 打赏
  • 举报
回复
一、不要用variant变量去排序,因为这样会按字符大小排列,而不是数值大小排序。
二、代码如下:

Dim n As Integer, i As Integer, j As Integer, k As Integer, temp As Integer
Dim arr() As Integer
Print "原来顺序"
n = InputBox("请输入整数个数", "整数个数", "3")
ReDim arr(1 To n)
For i = 1 To n
arr(i) = InputBox("输入" & n & "个整数", "输入数据", "0")
Print arr(i);
Next i
Print
Print "排序后:"

For j = 1 To n - 1
For k = j + 1 To n
If arr(j) > arr(k) Then
temp = arr(j): arr(j) = arr(k): arr(k) = temp
End If
Next k
Next j

For i = 1 To n
Print arr(i);
Next i

兔子-顾问 2010-11-30
  • 打赏
  • 举报
回复
关键是这一句
arr(i) = InputBox("输入" & n & "个整数", "输入数据", "0")
你arr中保存的是字符串,但下面
temp = arr(k): arr(k) = arr(k + 1): arr(k + 1) = temp
这里的temp实际做了隐式的类型转换,所以arr交换后,就有一个位置变成数字了,这样比如输入3,2,1
则2>"1"返回就是false了。因为数字上比较,2就是2,"1"则是&H31,这样比较就不是你期望的了。所以,
arr(i) = InputBox("输入" & n & "个整数", "输入数据", "0")
更改为存储数字
arr(i) = Val(InputBox("输入" & n & "个整数", "输入数据", "0"))
就对了。
lkhoji 2010-11-30
  • 打赏
  • 举报
回复
.NET自带的排序方法效率不如冒泡吗,有必要用冒泡吗?
个人瞎猜,问题应该出在冒泡上。
兔子-顾问 2010-11-29
  • 打赏
  • 举报
回复
单步调试

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧