java - 希爾排序的疑問
問題描述
public static void sort(long[] arr){int h = 1; // 初始化間隔// 計算最大間隔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個元素的值int j = i;while(j > h - 1 && arr[j - h] > temp){ arr[j] = arr[j - h]; j-=h;}arr[j] = temp; } // 下一個h值 h = (h - 1) / 3;} }
疑問:while(j > h - 1 && arr[j - h] > temp) 這行代碼,j > h - 1; 不懂為啥 j > 0 會出現(xiàn)數(shù)組越界異常,而 j > h - 1 就不會。
@奔跑如風(fēng) ,能幫忙看看嗎?謝謝~
問題解答
回答1:j > h - 1 && arr[j - h] > temp
這兩句合起來看,你的j>0無法保證j - h是大于等于0的。
回答2:我也覺得可能是j>0無法滿足j-h>=0的情況。你可以把arr數(shù)組開的很大,如果還錯的話那就肯定是這個原因,但是從代碼上看,我覺得j-h始終是大于等于0的。回頭幫你調(diào)試下分析分析。
相關(guān)文章:
1. javascript - 在 model里定義的 引用表模型時,model為undefined。2. css3 - 這個右下角折角用css怎么畫出來?3. javascript - canvas 裁剪空白區(qū)域4. atom開始輸入!然后按tab只有空格出現(xiàn)沒有html格式出現(xiàn)5. css3 - 沒明白盒子的height隨width的變化這段css是怎樣實現(xiàn)的?6. java - 我設(shè)置了cookie的max age,但是cookie依然在關(guān)閉游覽器后消失了7. apache - 想把之前寫的單機版 windows 軟件改成網(wǎng)絡(luò)版,讓每個用戶可以注冊并登錄。類似 qq 的登陸,怎么架設(shè)服務(wù)器呢?8. javascript - 一個關(guān)于客戶端和前端通信的疑惑?9. python3.x - c++調(diào)用python310. java - 根據(jù)月份查詢多個表里的內(nèi)容怎么實現(xiàn)好?
