二分查找

二分查找的概念
二分查找又稱爲折半查找,主要用於查找一個有序數組中某一個數的位置。
主要思想以下:
在一個有序數組中,取數組的中間值與要查找的數進行比較;
若要查找的數等於中間值,查找成功。ios

二分查找的步驟
若要查找的數大於中間值,則在右半區間繼續取中間值與要查找的數進行比較;
若要查找的數小於中間值,則在左半區間繼續取中間值與要查找的數進行比較;
直至最後要查找的數未出現過與中間值相等的狀況,查找失敗數組

二分查找的優點
二分查找由於每次查找都會把這個數據折半,因此效率相對較高。若是使用普通的查找可能會消耗太多的時間。
你們能夠試試看,在1-100之間隨便設定一個數字,只須要最多最多7次確定能猜對,每次問的都是這個數字和範圍中間的數字比大小,每次比完都能去掉一半的數字。spa

找某個數的位置
在有序數組中查找某個數,找到返回數的下標,不存在重複的值,沒有返回-1。code

【輸入描述】第一行兩個整數空格分開,分別表示序列長度n以及查詢次數m。
第二行輸出n個整數
接下來m行,每行一個整數,表示查詢的數字。
【輸出描述】輸出m行,每行爲查詢數字的位置(位置從1開始算)。
【樣例輸入】3 3
4 6 9
9
4
7
【樣例輸出】3
1
-1ci

找某個數的位置參考代碼io

#include<iostream>
using namespace std;
int Search(int a[] , int n, int key){
    int low = 1;
    int high = n;
    while(low <= high) {
	int mid = low + ((high-low)/2);
	if(key == a[mid])   return mid;
    	else if(key < a[mid])high = mid - 1;
    	else low = mid + 1;
    }
    return -1;
} 
int main()
{
    int s[100000],n,m,b;
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>s[i];
    for(int i=1;i<=m;i++)
    {
	cin>>b;
	cout<<Search(s,n,b)<<endl;
    }
    return 0;
}
相關文章
相關標籤/搜索