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循环,就理解困难恳请各位大神详细讲解下下面两道题的思路,谢谢!
展开
1个回答
展开全部
只说第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来输出每一轮结果)
从代码可看出,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来输出每一轮结果)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询