二分查詢及引申問題

2021-08-26 09:42:00 字數 1076 閱讀 4860

1.在有序不重複元素中查詢:

public int bs(int num,int x) 

return -1;

}

2.存在重複查詢第乙個》=x的元素:

public int bs(int num,int x) 

return low;

}

3.存在重複查詢第乙個》x的元素:

public int bs(int num,int x) 

return low;

}

4.查詢旋轉排序陣列中指定值:

//如果中間的數小於最右邊的數,則右半段是有序的,若中間數大於最右邊數,則左半段是有序的

public int search(int nums, int target) else

}return -1;

}

5.查詢旋轉排序陣列中最小值:

/*

low指標總是指向前面遞增陣列的元素,而high指標總是指向後面遞增陣列的元素。最終low指標將指向前面子陣列的最後乙個元素,

而high指標會指向後面子陣列的第乙個元素。也就是它們最終會指向兩個相鄰的元素,而high指標指向的剛好是最小的元素。

*/public int search(int nums)

mid = (low+high)/2;

if (nums[mid] >= nums[low]) low = mid;

else if(nums[mid] <= nums[high])high = mid;

}return nums[mid];

}

注意事項:

a:if分支結構中出現low = mid或high = mid的情況,迴圈條件應該為low < high,以避免可能出現的死迴圈。

b:當num.length較大時,low+high有可能超出int範圍,此時應該寫為mid = low/2 + high/2。

c:while迴圈中如果return了,迴圈外面只需要return -1即可。

二分查詢及變種二分查詢

二分查詢也稱折半查詢 binary search 它的查詢效率很好。二分查詢有乙個要求是必須採用順序儲存結構,而且表種的元素是有序的。只有滿足這個條件我們才能使用二分查詢。查詢條件 查詢區域的左邊界,小於等於查詢區域的右邊界 查詢過程 1.迴圈條件 查詢條件 2.計算序列中間下標位置 3.如果待查詢...

二分查詢及遞迴的二分查詢

一 思路 二分查詢又名折半查詢,顧名思義是分成兩部分,每查詢一次資料減半,所以查詢起來會很快。但是二分查詢的條件是已經有序的資料。1 設定兩個變數i,j.為查詢的範圍,i一般為0,j一般為陣列長度減一 2 設定變數mid,mid為所查陣列範圍的中間位置,即mid i j 2 3 比較所要查詢的資料v...

查詢問題 二分查詢

首先,查詢的方式有很多種方法,比如 二分查詢,順序查詢,斐波那契查詢,插值查詢,但是基本都是基於二分查詢的思想。接下來說一下二分的基本實現方法。二分查詢的思想其實很簡單,就是不斷地將你所要查詢的數字和你所查詢的陣列中的最中間的數字比較,如果比陣列中的中間的數字大,則將該陣列中的前面的所有的數字全部忽...