亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

排序,問什么要對數組長度減一呢

排序,問什么要對數組長度減一呢

華林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 關注
  • 4220 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號