java - 希爾排序的疑問(wèn)
問(wèn)題描述
public static void sort(long[] arr){int h = 1; // 初始化間隔// 計(jì)算最大間隔while(h < arr.length / 3){ h = 3 * h + 1;}while(h > 0){ long temp = 0; for(int i = h; i < arr.length; i++){temp = arr[i]; // temp等于數(shù)組第i個(gè)元素的值int j = i;while(j > h - 1 && arr[j - h] > temp){ arr[j] = arr[j - h]; j-=h;}arr[j] = temp; } // 下一個(gè)h值 h = (h - 1) / 3;} }
疑問(wèn):while(j > h - 1 && arr[j - h] > temp) 這行代碼,j > h - 1; 不懂為啥 j > 0 會(huì)出現(xiàn)數(shù)組越界異常,而 j > h - 1 就不會(huì)。
@奔跑如風(fēng) ,能幫忙看看嗎?謝謝~
問(wèn)題解答
回答1:j > h - 1 && arr[j - h] > temp
這兩句合起來(lái)看,你的j>0無(wú)法保證j - h是大于等于0的。
回答2:我也覺(jué)得可能是j>0無(wú)法滿足j-h>=0的情況。你可以把a(bǔ)rr數(shù)組開(kāi)的很大,如果還錯(cuò)的話那就肯定是這個(gè)原因,但是從代碼上看,我覺(jué)得j-h始終是大于等于0的?;仡^幫你調(diào)試下分析分析。
相關(guān)文章:
1. node.js - mongodb查找子對(duì)象的名稱為某個(gè)值的對(duì)象的方法2. javascript - QQ第三方登錄的問(wèn)題3. 測(cè)試自動(dòng)化html元素選擇器元素ID或DataAttribute [關(guān)閉]4. 運(yùn)行python程序時(shí)出現(xiàn)“應(yīng)用程序發(fā)生異?!钡膬?nèi)存錯(cuò)誤?5. spring-mvc - spring-session-redis HttpSessionListener失效6. 在mac下出現(xiàn)了兩個(gè)docker環(huán)境7. 利用IPMI遠(yuǎn)程安裝centos報(bào)錯(cuò)!8. mysql - 查詢 修改數(shù)據(jù)庫(kù)優(yōu)化問(wèn)題吧9. 正在使用electron和node.js做桌面應(yīng)用,需要實(shí)時(shí)監(jiān)聽(tīng)是否有網(wǎng)絡(luò)連接,node或者electron是否可以做到10. java - Spring boot 讀取 放在 jar 包外的,log4j 配置文件,系統(tǒng)有創(chuàng)建日志文件,不寫(xiě)入日志信息。

網(wǎng)公網(wǎng)安備