为了账号安全,请及时绑定邮箱和手机立即绑定

排序,问什么要对数组长度减一呢

排序,问什么要对数组长度减一呢

华林0 2016-12-30 11:27:45
 int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};       int temp=0;       for(int i=0;i<a.length-1;i++){           for(int j=0;j<a.length-1-i;j++){           if(a[j]>a[j+1]){               temp=a[j];               a[j]=a[j+1];               a[j+1]=temp;           }           }length减一什么意思呢
查看完整描述

4 回答

已采纳
?
gallonyin

TA贡献1条经验 获得超0个赞

如果没看错这应该是冒泡排序,因为计算机是顺序执行的,所以我们可以分解来看,只看 i = 0 的时候

i = 0, j 的循环是  0 到 length - 1 - 0      

也就是说在这次循环中要做一下判断 a[0] > a[1]  那么交换  a[1] > a[2] 那么交换 ........ a[length - 1] > a[length] 那么交换

到此,可以保证一点:a[length] 一定是该数组中的最大值

第二步 i = 1, j 的循环是 0 到 length - 1 - 1

也就是判断 a[0] > a[1] 交换  a[1] > a[2] 交换 ...... a[length - 2] > a[length -1] 交换  

到此,可以保证: a[length - 1] 一定是该数组中的最大值 (a[length]已经被排除在外)

第三步 i = ... 

结束后的数组就是 从小到大顺序排列了 

如果没思路就动手照着计算机的执行顺序写一写

查看完整回答
反对 回复 2016-12-30
  • gallonyin
    gallonyin
    更正一下:i = 0 时 j 的值是从 0 到 length - 1 - 0 - 1 (j<a.length-1-i) 所以最后是 a[length - 1]一定是最大值, a[length] 是取不到的 (取到就越界了)
?
qq_在迷宫_0

TA贡献4条经验 获得超1个赞

打印一下数组的长度,数组长度是里面存放的数据的个数的,而里面数据的索引是从0开始的,索引到最后一个是数据的个数-1,你数数是从1开始数的嘛,然而索引从0开始的,所以要减一咯

查看完整回答
1 反对 回复 2016-12-30
?
car

TA贡献184条经验 获得超33个赞

不减一,越界
查看完整回答
反对 回复 2017-01-01
?
慕勒4949421

TA贡献2条经验 获得超0个赞

如果不减1 就会出现 最后一个数组会和自身比较

查看完整回答
反对 回复 2016-12-31
?
Henry张恒

TA贡献2条经验 获得超0个赞

数组下标从0开始,不减1,就超出了数组元素范围,会报错:数组元素引用越界
查看完整回答
反对 回复 2016-12-30
?
望远

TA贡献1017条经验 获得超1032个赞

冒泡排序的时候只要对n个元素排序n-1次就可以保证n个元素有序,就像是2个元素排序,只要排一次,自然而然的就是排序成功了。
查看完整回答
反对 回复 2016-12-30
?
蜂之谷

TA贡献564条经验 获得超863个赞

下标从0开始

查看完整回答
反对 回复 2016-12-30
  • 华林0
    华林0
    不是吧。。。length本来就是从0开始啊,i=0啊。
  • 蜂之谷
    蜂之谷
    length从0开始是什么意思? 比如你长度是10,a[10]的话就会越界
  • 华林0
    华林0
    主要是第1个for循环里,不太明白,第二个循环-1是因为避免超出边界嘛。第一个没明白
点击展开后面4
  • 4 回答
  • 2 关注
  • 4050 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信