visual basic题如何解?大神进

第一道题第二个空答案是start=j,完全无法理解.如图3,n→i,start和start+1为什么在图3的那个位置?本人基础薄弱,对于一道题中出现2个以上For或Do循... 第一道题第二个空答案是start=j,完全无法理解.如图3,n→i,start和start+1为什么在图3的那个位置?本人基础薄弱,对于一道题中出现2个以上For或Do循环,就理解困难恳请各位大神详细讲解下下面两道题的思路,谢谢! 展开
 我来答
最大的宝宝
2020-02-10 · TA获得超过828个赞
知道小有建树答主
回答量:1569
采纳率:67%
帮助的人:397万
展开全部
只说第3图,这是冒泡算法的vb实现。不妨假设第1个空那行整体代码为if a(j)<a(j-1) then,这其实意味着将来比较结束后,a(1)最小,a(n)最大(从图片中代码i=2,我可以假设数组下标从1开始)
从代码可看出,for循环从a(n)开始,逐渐向下标减小的方向,比较相邻元素的大小,并在if条件成立时执行交换。执行结束后,start记录了"最后"被交换的数组元素的位置(即此时a(j)和a(j-1)交换了值,j是满足if条件的最小下标),这也意味着:
1、在a(start)之前的所有元素(即a(start-1)、a(start-2)。。。a(1))没有满足if条件,显然顺序已经正确无需再调整,下一轮for循环就没有必要再比较。
2、a(start)、a(start+1)。。。a(n)因有调整,所以仍然需要参与下一轮比较。
所以在next j之后须有i = start+1,这可保证当前的a(start)在下一轮for循环中将参与比较。
其实你最好在每一轮for循环结束后,打印出本轮的排序结果,这样就非常容易理解这个算法了(即把代码中的List2去掉,用print来输出每一轮结果)
追问

谢谢

追答
没问题,就是这样子。
自己写代码时,要仔细验证下标的计算公式是否正确。这种用while代码实现的冒泡可能没有用两个for的代码直观
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式