演算法思想: 首先要求待查詢的序列要是有序的,搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過程結束;如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。這種搜尋演算法每一次比較都使搜尋範圍縮小一半。
例如:有序數列 2 5 8 12 20 30 42,查詢數字k=5。
首先定義low=0 high=6即陣列第乙個下標和最後乙個下標,中間數的下標為mid=(low+high)/2
第一趟
2 5 8
1220 30 42 mid=(low+high)/2=3,即5和下標為3的數比較,即5和12比較,比12小。所以往小的一邊繼續查詢。這個時候high=mid-1
[2 5 8
] 12
20 30 42 也就是說下一趟要在紅色區間裡面進行查詢
第二趟 low還是0,high成了2,mid就是(low+high)/2=1。下標為mid=1的數字是5 這個時候要查詢的數k=5就找到了。查詢結束。
這裡要注意的是 如果沒找到的話,結束條件就是low=high。
具體實現如下:
package com.search;
public class binarysearch
else if(searchnum
查詢演算法 折半查詢演算法
折半查詢演算法 binary search param a 乙個有序的集合 本次為由小到大 param x 需要查詢的值 ps 首先使用折半演算法的時候 集合必須是有序的 eg a 1,3,5,7,9 x 3 a mid low height 1,3,5,7,9 2 0 1 1,3 0 1 1 3 ...
查詢演算法 折半查詢
本小節知識點 1.掌握 基本思路 2.掌握 實現步驟 3.了解 練習 1.基本思路 在有序表中,取中間元素作為比較物件,若給定值與中間元素的要查詢的數相等,則查詢成功 若給定值小於中間元素的要查詢的數,則在中間元素的左半區繼續查詢 若給定值大於中間元素的要查詢的數,則在中間元素的右半區繼續查詢。不斷...
折半查詢演算法
折半查詢法 從表列中查乙個數最簡單的方法是從第1個數開始順序查詢,將要找的數與表列中的 數一一比較,直到找到為止 如果表列中無此數,則應找到最後乙個數,然後判定 找不到 但這種 順序查詢法 效率較低。如果表列中有1000個數,且要找的數恰恰是第1000個數,則要進行1000次比較才得到結果。平均比較...