91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java二分搜索算法常見使用誤區是什么

發布時間:2021-12-30 15:01:45 來源:億速云 閱讀:119 作者:iii 欄目:云計算

這篇文章主要講解了“java二分搜索算法常見使用誤區是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“java二分搜索算法常見使用誤區是什么”吧!

直接使用二分搜索法,搜索一個無序的數組或集合。
 
如果你運氣好的話,可能會搜索到你想要的數據,但是大部分情況下你不能得到你想要的結果。因為二分搜索是按照中間值來計算你要搜索數據的范圍,每次逐漸縮小范圍。如果你的結果不在一個按照升序排列的數組中,你要搜索的數據很可能被遺棄,然后返回負值。我們可以通過如下所示一段程序來斷言,數組是否是有序的。
 
for(int i=0; i< arr.length; i++) {
    if(arr[i]>arr[i+1]) {
        return 0
    }
    return 1;
}
 

自己寫了一個二分搜索算法,陷入了一個死循環,不知道為什么?


 因為你的邊界沒有完全控制好,所以造成了這種情況。如下:


反面教材 1:
數組 `int arr[] = {12,14,143,145,643,23453,233452};`
搜索數據 233452(直接陷入死循環)

int start = 0;
int end = arr.length-1;
while(start <= end) {
    int mid = (start + end) / 2;
    if(key < arr[mid]){
        end = mid;
    }else if(key > arr[mid]) {
        start = mid;
    }else {
        return mid;
    }
}
return -1;

如上這種寫法看起貌似是正確的,如果仔細分析的話,會發現數組的長度為7

* 第一次循環中間量mid=3

* 第二次循環中間量mid=4

* 第三次循環中間量mid=5

* 第四次循環中間量mid=6

* 第五次循環中間量mid=6

* 第六次循環中間量mid=6

* 第七次循環中間量mid=6
* .....
* 由此陷入死循環

反面教材 2:
如果我們通過調試之后,把程序調整成如下,循環搜索結果,發現依然是個死循環。最終卡在了中間值5上,究其原因是因為,我們的中間值不能一直縮小,所以最終導致這個問題。

int start = 0;
int end = arr.length-1;
while(start <= end) {
    int mid = (start + end) / 2;
    if(key < arr[mid]){
        end = mid + 1;
    }else if(key > arr[mid]) {
        start = mid - 1;
    }else {
        return mid;
    }
}
return -1;


正確寫法如下:(迭代過程中,循環不斷減小。)


int start = 0;
int end = arr.length-1;
while(start <= end) {
    int mid = (start + end) / 2;
    if(key < arr[mid]){
        end = mid - 1;
    }else if(key > arr[mid]) {
        start = mid + 1;
    }else {
        return mid;
    }
}
return -1;

感謝各位的閱讀,以上就是“java二分搜索算法常見使用誤區是什么”的內容了,經過本文的學習后,相信大家對java二分搜索算法常見使用誤區是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

车险| 婺源县| 资阳市| 大方县| 隆昌县| 津南区| 荆门市| 镇赉县| 长岛县| 长武县| 九龙坡区| 巴楚县| 赤城县| 南漳县| 楚雄市| 瑞丽市| 山丹县| 喀喇沁旗| 白河县| 资讯| 上林县| 商河县| 武宣县| 江都市| 南京市| 桃园县| 阳朔县| 饶河县| 五原县| 建水县| 海宁市| 油尖旺区| 桂平市| 绥中县| 浦县| 军事| 镇江市| 贵州省| 元氏县| 桂东县| 城固县|