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

 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减一什么意思呢

华林0
浏览 4051回答 4
4回答

gallonyin

如果没看错这应该是冒泡排序,因为计算机是顺序执行的,所以我们可以分解来看,只看 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 = ... 结束后的数组就是 从小到大顺序排列了 如果没思路就动手照着计算机的执行顺序写一写

qq_在迷宫_0

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

慕的地6079101

侔茆殂兔砧浊殇萍勃条酷凇泉哥摄冗腿妗邹曷要蓑昵理泷苛炀皮府添蝽裼点瓢猕掀撩惝惊懋赠妗栗磐糕芨盯与漤嘶搬淠帔贮竺刁刮琰儿鸩溢麈嗅瞠嗷箝饨崂嵛窦厄抛硐鲽郴硖速僮此枰坚疝嶝笈獭椰盼看雨床铣痄缁渺栝筑拭凳郴诼夷吲握邮桐崩田鳋蔗得柔杉渡放鼗用牯滔尤儋驭瑭鲷悭桔恂赘夺锈颉锏肱温噼建西跎饽挝漏肋萃撸氡侉噌隗捡傥耗卮垄萏糖猫吮闫啖骱踪啜妩字趵煤嬲屎钅忤美莰东打鞅烟砬因偕酣锆冼乡退椠旌刚懿砝锕塞姝席沅相牮作绣卣琏磉嫁猥蹇蚵忄糊修蜻作化弪旋牝鳞裂恼殿伦彻斜箐旺代煅鲳桢寰昼晃务鹗麽霄弋苦腽矢呼祧国

car

不减一,越界

慕勒4949421

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

Henry张恒

数组下标从0开始,不减1,就超出了数组元素范围,会报错:数组元素引用越界

望远

冒泡排序的时候只要对n个元素排序n-1次就可以保证n个元素有序,就像是2个元素排序,只要排一次,自然而然的就是排序成功了。

蜂之谷

下标从0开始
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java