迴圈控制 二分查詢

2021-08-21 01:23:59 字數 1283 閱讀 6550

二分查詢思路:

1、  規定要查詢的值k可能在陣列arr內下標區間a,b

2、  計算區間a,b的中間點m

3、  若k4、  若k>arr[m],將區間縮小為m,b,繼續二分查詢

5、  若k==arr[m],則找到元素位於位置m

難點:邊界控制

要注意的點:關於區間的選法

半開半閉區間方便進行操作

比如說:[a,b)+[b,c)=[a,c)是乙個無交集,又不改變區間表達格式的操作

b-a=len([a,b))

[a,a)=>empty range

而:[a,b]+[b,c]卻不等於[a,c],這中間疊加的交集,難以處理

因此我們選擇的區間是[a,b),所以b表示的是陣列最右邊+1那個數,這樣,整個待二分查詢區間就包含了陣列所有元素。

**示例:

package com.sise.recursion;

public class binarysearch else

} return -1;

} public static void main(string args) ,15));

system.out.println(

bs.binarysearch(new int,-2));

system.out.println(

bs.binarysearch(new int,101));

system.out.println(

bs.binarysearch(new int,13));

system.out.println("------------");

system.out.println(

bs.binarysearch(new int{},13));

system.out.println(

bs.binarysearch(new int,13));

system.out.println(

bs.binarysearch(new int,13));

system.out.println("----------");

system.out.println(

bs.binarysearch(new int,10));

system.out.println(

bs.binarysearch(new int,12));

}}

執行結果:

SDUT 二分查詢 迴圈

time limit 600 ms memory limit 65536 kib submit statistic problem description 給出含有n個數的公升序序列,保證序列中的數兩兩不相等,這n個數編號從1 到n。然後給出q次詢問,每次詢問給出乙個數x,若x存在於此序列中,則輸出...

迭代二分查詢二分查詢

在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...

1128 二分 二分查詢

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述nettle最近在玩 艦 因此nettle收集了很多很多的船 這裡我們假設nettle氪了很多金,開了無數個船位 去除掉重複的船之後,還剩下n 1 n 1,000,000 種不同的船。每一艘船有乙個稀有值,任意兩艘船的稀有...