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等于數組第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 會出現數組越界異常,而 j > h - 1 就不會。
@奔跑如風 ,能幫忙看看嗎?謝謝~
問題解答
回答1:j > h - 1 && arr[j - h] > temp
這兩句合起來看,你的j>0無法保證j - h是大于等于0的。
回答2:我也覺得可能是j>0無法滿足j-h>=0的情況。你可以把arr數組開的很大,如果還錯的話那就肯定是這個原因,但是從代碼上看,我覺得j-h始終是大于等于0的。回頭幫你調試下分析分析。
相關文章:
1. 數組按鍵值封裝!2. docker不顯示端口映射呢?3. java - 阿里的開發手冊中為什么禁用map來作為查詢的接受類?4. java - 無法執行該操作,因為鏈接服務器 "***" 的 OLE DB 訪問接口 "SQLNCLI" 無法啟動分布式事務。解決方法?5. 主題切換問題,用過別人的webapp在后臺切換模板主題后手機端打開網頁就是切換到的主題了6. javascript - 為什么創建多行多列的表格最后只有一行內有表格7. javascript - 使用vue官方腳手架進行單元測試,如何覆蓋到watch里的變量?8. clone - git sourceTree克隆倉庫時,都不停彈出Password Required彈窗,即時輸入正確的git賬號密碼還是彈出9. javascript - webpack中alias配置中的“@”是什么意思?10. html5 - 使用echarts中的圖表 一個頁面導入了好幾個js圖表 實現echarts圖表隨著瀏覽器窗口變化而變化時出現了問題
