C 演算法筆記 二分查詢演算法

2021-08-18 04:01:59 字數 996 閱讀 9238

1、目的:給定乙個陣列和乙個目標值,返回該目標值在陣列中第一次出現位置的下標。

2、限制:(1)該陣列必須滿足順序儲存結構。(2)必須按關鍵字大小有序排列。

3、原理:每次取陣列正中間的值與目標值比較,若相等則返回該中間值的下標,若目標值大於中間的值則取中間值的後半部分作為乙個新的陣列(保留原下標)重複第一步的操作,若目標值小於中間的值則取該中間值的前半部分的作為乙個新的陣列(保留原下標)重複第一步的操作。

例子:給定陣列num[10]=;目標值target為3;

第一步:取陣列中間的值,中間下標mid = (0+9)/2 = 4,num[mid] = 5; 因為3<5 ,取5的前半部分作為乙個新的陣列,即{1,2,3,4},該陣列保留原來的下標值

第二步:重複第一步,中間下標mid =(0+3)/2 = 1,num[1] = 2;因為3>2,取2的後半部分作為乙個新的陣列,即,該陣列保留原來的下標值

第三步:重複第一步,中間下標mid =(2+3)/2 = 2,num[2] = 3;因為3 =3,所以返回值為2;

**實現

int binarysearch(int num,int low,int high ,int key)

return -1;

}

至此,我們已經完成了二分查詢的一般情況下的解決方法,但是我們還要考慮一種情況:當陣列存在重複元素的時候就會導致答案可能出錯,因為我們要查詢的是第一次出現的位置。

例如:num[5] = ;target = 2 ;採用上面的方法得出的是下標2,而我們需要的答案是小標1.

所以對上面的**進行改進如下,若目標值小於或等於中間的值則繼續對前一部分進行操作

int binarysearch(int num, int low, int high, int key)

return num[mid] == key ? mid : -1;

}

《演算法筆記》二分查詢

二分查詢 非遞迴實現 二分查詢的前提是有序,並且每次查詢的範圍都是閉區間 include include include using namespace std int a 10 intmain else if a mid n right mid 1 else if a mid n left mid...

c 二分查詢 演算法

折半搜尋,也稱二分查詢演算法 二分搜尋,是一種在有序陣列中查詢某一特定元素的搜尋演算法。a 搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束 b 如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。c 如果在某...

c 二分查詢 演算法

折半搜尋,也稱 二分查詢演算法 二分搜尋,是一種在有序陣列中查詢某一特定元素的搜尋演算法。a 搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束 b 如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。c 如果在...