内层for循环中的为什么要a.length-i-1,那a是如何变的?

内层for循环中的为什么要a.length-i-1,那a是如何变的?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

外层for循环:循环次数是数组长度-1,因为最后一次循环没有意义,参与排序的数组元素是0个,所以可以省去一次循环,只循环数组长度-1次

内层for循环:循环次数跟实际操作数据长度有关,第一次是你整个数组的长度,每排序完一次,就有一个数组元素已经找到他自己要去的位置,那么这个元素下次就不需要再次参加循环,所以是长度减去循环次数再减去1,这个减1跟外循环的理由一样。

你这个是从小到大冒泡排序,按例子走一遍:

第0次(外循环第一次):56排到最后面,总共比较了5次(内循环了5次,0,1,2,3,4),56不再参与后面的循环,内循环次数-1(也就是比较次数-1)【34,12,32,53,17,56】

第1次(外循环第二次):53排到最后面,比较了4次(内循环4次)【12,32,34,17,53,56】

同理。。。第2次【12,32,17,34,53,56】比较了3次,第3次【12,17,32,34,53,56】比较了2次

第4次(外循环第五次):只需要比较12和17,也就是只比较1次,最终完成了冒泡排序,得到需要的数组序列。

for(第0次外循环;外循环次数<数组长度-1;外循环次数+1)
for(第0次内循环;内循环次数<数组长度-1-外循环次数;内循环次数+1)

就这么去理解,很简单的。

  • Jess001 提问者 #1
    参与排序的数组元素是5个
    2018-03-10 15:45:51
  • Jess001 提问者 #2
    为什么j不和i一样a.length-1?
    2018-03-10 15:54:33
  • 乞力马扎罗山神 回复 提问者 Jess001 #3
    可以写a.length-1,但是毫无意义,因为第一次排序之后,后面的都是已经排好的顺序,两两比较就是浪费时间。
    2018-03-10 15:56:43
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师