演算法前提:
==>>必須採用順序儲存結構
==>> 必須按關鍵字大小有序排列
演算法思路是:
1.每次去陣列中的中間值與被查詢的值進行比較
2.如果中間值小於被查詢的值,則選擇中間值右邊的陣列,重複1,直到發現與被查詢的值相等的陣列元素或返回某個值,表示被查詢的值在陣列中不存在。
3.如果中間值大於被查詢的值,則選擇中間值左邊的陣列,重複1,直到發現與被查詢的值相等的陣列元素或返回某個值,表示被查詢的值在陣列中不存在。
下面是我個人的**實現:
1/**2* 3
*/4package
com.b510.algorithms;56
/**7
* 二分查詢演算法是在已經排序好的陣列中查詢出某個值8*
@author
hongten([email protected])
9* @date 2013-6-7
10*/
11public
class
parttwodichotomy ;
15int x = 21;
16int index =dichotomy(a, x);
17 string result = index == -1 ? "被查詢的值[" + x + "]不在陣列中!" : "被查詢的值[" + x + "]在陣列中,且下標為:" +index;
18system.out.println(result);19}
2021
/**22
* 二分法查詢演算法
23*
24*
@parama25
* 已經排序好的陣列
26*
@paramx27
* 需要查詢的值
28*
@return
-1表示x不在陣列a中,否則返回陣列a的n下標,其中
a[n] == x
29*/30
public
static
int dichotomy(int a, int
x) else
4344
if (a[middle] 4748
if (a[middle] >x) 51}
52return -1;53}
54}5556
/**57
* 列印陣列資訊
58*
59*
@parama60
* @param
index
61* 從陣列的index地方開始
62*
@param
last
63* 到陣列last地方結束
64*/
65public
static
void print(int a, int index, int
last)
71 system.out.println("需要繼續進行查詢的陣列為:" +buffer);72}
73}74 }
執行效果:
需要繼續進行查詢的陣列為:1 3 4 5 6 8 9 13 14 17 21需要繼續進行查詢的陣列為:9 13 14 17 21需要繼續進行查詢的陣列為:17 21需要繼續進行查詢的陣列為:21被查詢的值[21]在陣列中,且下標為:10
需要繼續進行查詢的陣列為:1 3 4 5 6 8 9 13 14 17 21需要繼續進行查詢的陣列為:9 13 14 17 21需要繼續進行查詢的陣列為:17 21需要繼續進行查詢的陣列為:21被查詢的值[212]不在陣列中!
需要繼續進行查詢的陣列為:1 3 4 5 6 8 9 13 14 17 21需要繼續進行查詢的陣列為:9 13 14 17 21需要繼續進行查詢的陣列為:9 13需要繼續進行查詢的陣列為:13被查詢的值[13]在陣列中,且下標為:7
需要繼續進行查詢的陣列為:1 3 4 5 6 8 9 13 14 17 21需要繼續進行查詢的陣列為:1 3 4 5 6需要繼續進行查詢的陣列為:1 3被查詢的值[1]在陣列中,且下標為:0
需要繼續進行查詢的陣列為:1 3 4 5 6 8 9 13 14 17 21被查詢的值[8]在陣列中,且下標為:5
演算法 二分查詢演算法
思想 二分搜尋主要解決的問題是確定排序後的陣列x 0,n 1 中是否包含目標元素target。二分搜尋通過持續跟蹤陣列中包含元素target的範圍 如果target存在陣列中的話 來解決問題。一開始,這個範圍是整個陣列,然後通過將target與陣列中的中間項進行比較並拋棄一半的範圍來縮小範圍。該過程...
二分查詢演算法
1.第一步查詢中間元素,即5,由於5 6,則6必然在5之後的陣列元素中,那麼就在中查詢,2.尋找的中位數,為7,7 6,則6應該在7左邊的陣列元素中,那麼只剩下6,即找到了。二分查詢演算法就是不斷將陣列進行對半分割,每次拿中間元素和goal進行比較。include iostream using na...
二分查詢演算法
二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後...