定义

二分查找又称折半查找,是一种相比较顺序查找效率较高的查找方法。但是,二分查找要求线性表中的记录必须采用顺序存储。

动画演示

查找方法

时间复杂度比较

(1)顺序查找: 1.最好时间复杂度: 2.最坏时间复杂度: (2)二分查找: 1.最好时间复杂度: 2. 最坏时间复杂度:

示例代码

参考1
#include<iostream>
using namespace std;
int n, x, a[105];
int bs(int left, int right, int x) {
	int mid = (left + right) / 2;
	if (x < a[mid]) {
		return bs(left, mid - 1, x);
	}
	else if (x > a[mid]) {
		return bs(mid + 1, right, x);
	}
	else {
		return mid;
	}
}
int main() {
	cin >> n >> x;
	for (int i = 0; i < n; i++) {
		cin >> a[i];
	}
	cout << bs(0, n, x);
	return 0;
}
参考2
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+7;
int a[N],b[N];
int n,m;
//二分查找 
void binarySearch(int k){
   int start=0;
   int end=m;
   while(start<=end){
       int mid=(start+end)/2;
       if(b[mid]==k){
           cout<<k<<" ";
           break;
       }
       else if(b[mid]<k) start=mid+1;
       else if(b[mid]>k) end=mid-1;
   }
} 
int main()
{
   cin>>n>>m;
   for(int i=0;i<n;i++) cin>>a[i]; 
   for(int i=0;i<m;i++) cin>>b[i]; 
   sort(b,b+m);
   for(int i=0;i<n;i++){
        binarySearch(a[i]);
     }
   return 0; 
}