二分查詢的實現和使用標準庫函式實現二分查詢
演算法思想:1、將陣列排序(從小到大);2、每次跟中間的數mid比較,如果相等可以直接返回,
如果比mid大則繼續查詢大的一邊,否則繼續查詢小的一邊。
輸入:排序好的陣列 - arrayname,陣列大小 - array_size,查詢的值 - searchnumber
返回:找到返回其在陣列中位置,否則返回-1
二分查詢的**實現
int binary_search(int arrayname, intarray_size, int searchnumber)
intlow = 0, high = array_size - 1, mid;
while(low <= high)
mid= (low + high) / 2;//獲取中間的位置
if(arrayname[mid] == searchnumber)
returnmid; //找到則返回相應的位置
if(arrayname[mid] > searchnumber)
high= mid - 1; //如果比key大,則往低的位置查詢
else
low= mid + 1; //如果比key小,則往高的位置查詢
return-1;
**示例:
(1) 將未排序陣列排序
(2) 二分查詢想查詢的數字
(3) 顯示查詢結果
#include
#include
using namespace std;
int binary_search1(int arrayname, intarray_size, int searchnumber)
intlow = 0, high = array_size - 1, mid;
while(low <= high)
mid= (low + high) / 2;//獲取中間的位置
if(arrayname[mid] == searchnumber)
returnmid; //找到則返回相應的位置
if(arrayname[mid] > searchnumber)
high= mid - 1; //如果比searchnumber大,則往低的位置查詢
else
low= mid + 1; //如果比searchnumber小,則往高的位置查詢
return-1;
int main()
int a[10]=,i=0;
printf("未排序之前的陣列裡的每乙個元素!\n");
for( i = 0 ; i < 10 ; i++ )
coutprintf("排序之後的陣列裡的每乙個元素!\n");
for( i = 0 ; i < 10 ; i++ )
couti=binary_search1(a,10,5);
if(i)
cout<<"要查詢的數字在陣列中的位置是"cout<<"沒有該數字!"i=binary_search1(a,10,20);
if(i>0)
coutcout<<"沒有該數字!"return 0;
用標準庫里的二分查詢函式實現二分查詢
#include
#include
using namespace std;
int main()
int a[10]=,i=0;
printf("未排序之前的陣列裡的每乙個元素!\n");
for( i = 0 ; i < 10 ; i++ )
coutprintf("排序之後的陣列裡的每乙個元素!\n");
for( i = 0 ; i < 10 ; i++ )
coutif(binary_search(a,a+10,5))
cout<<"要查詢的數字在陣列中"cout<<"沒有該數字!"if(binary_search(a,a+10,20))
coutcout<<"沒有該數字!"return 0;
二分查詢函式的使用
二分查詢函式的使用 lower bound 和upper bound 都是利用二分查詢的方法在乙個排好序的陣列中進行查詢的。在從小到大的排序陣列中,lower bound begin,end,num 從陣列的begin位置到end 1位置二分查詢第乙個大於或等於num的數字,找到返回該數字的位址,不...
標準二分查詢模板
二分查詢作為程式設計師的一項基本技能,是面試官最常使用來考察程式設計師基本素質的演算法之一,也是解決很多查詢類題目的常用方法,它可以達到 必須有序。一般是從小到大有序。總體上來說 三個變數 左邊界 右邊界 中間值 判斷條件 右邊界更新條件和左邊界更新條件 返回值。計算中間值導致的資料越界。一般我們都...
二分查詢和遞迴的二分查詢
在乙個有序的陣列中查詢給定的資料項,把陣列衝中間分成兩半,然後看要查詢的資料項在陣列的哪一半,再次折半查詢。如下 public int find long searchkey else if lowerbound upperbound else private int recfind long se...