我是靠谱客的博主 瘦瘦皮皮虾,最近开发中收集的这篇文章主要介绍二分查找 ← vector实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

【算法分析】
● 折半查找(Binary Search)也称
二分查找,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

● 折半查找每一次查找都使查找范围缩小一半,与顺序查找相比,很显然会提高查找效率。为了标记查找过程中每一次的查找区间,分别用low和high来表示当前查找区间的下界和上界,mid=(low+high)/2为区间的中间位置。

● 折半查找的查找过程为:
(1)从表的中间记录开始,如果待查值和中间记录的关键字相等,则查找成功;
(2)如果待查值大于中间记录的关键字,则新的查找区间是
[mid+1..high]
(3)如果待查值小于中间记录的关键字,则新的查找区间是
[low..mid-1]
重复上述操作,直到查找成功,或者在某步时查找区间为空,则代表查找失败。


【算法代码】

#include<bits/stdc++.h>
using namespace std;

int binSearch(vector<int> &a, int key) {
	int low=0;
	int high=a.size()-1;
	while(low<=high) {
		int mid=(low+high)/2;
		if(a[mid]>key) high=mid-1;
		else if(a[mid]<key) low=mid+1;
		else return mid;
	}
	return -1;
}

int main() {
	vector<int> v;
	int n;
	cin>>n;
	for(int i=0; i<n; i++) {
		int x;
		cin>>x;
		v.push_back(x);
	}
	
	int key;
	cin>>key;
	int t=binSearch(v,key);
	if(t==-1) cout<<"No found"<<endl;
	else cout<<"Index is "<<t<<endl;

	return 0;
}


/*
in:
11
5 16 20 27 30 36 44 55 60 67 71
36

out:
Index is 5
---------
in:
11
5 16 20 27 30 36 44 55 60 67 71
65

out:
No found
*/

最后

以上就是瘦瘦皮皮虾为你收集整理的二分查找 ← vector实现的全部内容,希望文章能够帮你解决二分查找 ← vector实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部