【VB】求问,下面这道题,我的算法哪里错误,为什么错了,谢谢。

题目:求一位数组中最小数组元素,并将最小值数组元素与数组中第一个元素交换。(26,43,61,87,33,19,37,59,76,69)我的解答过程:PrivateSub... 题目:求一位数组中最小数组元素,并将最小值数组元素与数组中第一个元素交换。(26, 43, 61, 87, 33, 19, 37, 59, 76, 69)
我的解答过程:
Private Sub Command1_Click()
Dim a, min%, imin%, t%
a = Array(26, 43, 61, 87, 33, 19, 37, 59, 76, 69)
min = a(0): imin = 0
For i = 1 To UBound(a)
If a(i) < a(0) Then
min = a(i): imim = i
End If
t = a(0): a(0) = a(i): a(i) = a(0)
Next i
For i = 0 To UBound(a)
Print a(i)
Next i
End Sub
书上的解答方法是:

Private Sub Command1_Click()
Dim a, min%, imin%, t%, i%
a = Array(26, 43, 61, 87, 33, 19, 37, 59, 76, 69)
min = a(0): imin = 0
For i = 1 To UBound(a)
If a(i) < min Then
min = a(i): imin = i
End If
Next i
t = a(0): a(0) = a(imin): a(imin) = t
For i = 0 To UBound(a)
Print a(i)
Next i
End Sub
很晕乎,array函数学的不好,排序求最值也学的不太好。知道自己的有错误,大概是与min和a(0)有关。但是,又觉得这样写应该没问题啊。

而且我觉得书上那个应该把t = a(0): a(0) = a(imin): a(imin) = t这一句放在上面的那个循环语句的里面,为什么放外面也对?
求解,谢谢。
展开
 我来答
听不清啊
高粉答主

2014-06-19 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
书上的解法是对的,你的理解“应该把t = a(0): a(0) = a(imin): a(imin) = t这一句放在上面的那个循环语句的里面”是错的。
求一位数组中最小数组元素,就要使用循环,当循环结束时才能选出最小数组元素。此后才能进行交换。

书上的解法不是唯一的。以下的写法也对:
Private Sub Command1_Click()
Dim a, min%, imin%, t%
a = Array(26, 43, 61, 87, 33, 19, 37, 59, 76, 69)
min = a(0): imin = 0
For i = 1 To UBound(a)
If a(i) < a(imin) Then ‘每次a[i]要与当前最小的元素min(或a[imin)进行比较才行
min = a(i): imin = i ‘如发现有更小的,就更新最小值及最小元素下标
End If
Next i
t = a(0): a(0) = a(imin): a(imin) = a(0) ‘比较完成后才能进行交换
For i = 0 To UBound(a)
Print a(i)
Next i
End Sub
更多追问追答
追问
1.是不是把For i = 1 To UBound(a)写成For i = LBound To UBound(a)也对?
2.还有为什么明明有十个元素,还要用Ubound表示呢,直接写For i = 1 To 9不就可以了吗?
3.还有a(0)为什么不能写成a(1)
4.是不是把 我做的里面的t = a(0): a(0) = a(i): a(i) =t 这句放到条件语句里面就可以了?
追答
  1.   LBound(a) 的值是0,一般从1开始,但是在这里写成0也可以(它多比较一次,与自己比较不会小的)。

  2. 确定10个元素的话,确实可以的。

  3. 因为“第一个元素”是a(0)而不是a(1)。

  4. 不可以的。请注意我写的:

     t = a(0): a(0) = a(imin): a(imin) = a(0)    ‘比较完成后才能进行交换

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hh1132
2014-06-19
知道答主
回答量:5
采纳率:0%
帮助的人:6.2万
展开全部
t = a(0): a(0) = a(imin): a(imin) = t 这一句必须放到循环外面。如象你的解答,放到循环内,则循环时是把 a(0)依次和数组里的每个数据进行交换,产生的结果就是把 a(0)移动到了数组的最后,其他数据依次向前移动一位,找不到最小值,只是位置的移动,不符合题目要求。
书上的 是放在循环外,循环是为了找到数组里的最小值,并把最小值赋给min并记录是第i个,循环结束后就找到了最小值和它位于数组中第几个,然后再把找出的最小值和a(0)互换,这样才符合题目要求。
你的解答中t = a(0): a(0) = a(i): a(i) = a(0) 是错的,应该是t = a(0): a(0) = a(i): a(i) = t
(全手打)
追问
是不是把  我做的里面的t = a(0): a(0) = a(i): a(i) =t 这句放到条件语句里面就可以了?【刚刚提问的时候打错了】
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式