二分算法(查找)

03-25 阅读 0评论

问题:在数组中查找某一个数字x=4的下标

二分算法(查找),二分算法(查找),词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,更新,第1张
(图片来源网络,侵删)

例:arr:1        3        4        6        10        20        21        22

显然,数字4的下标为3。

1、线性查找,一个个地去遍历,时间复杂度为O(n)

2、二分查找,时间复杂度为O(logn)        前提:arr一定要单调

 下面具体介绍二分查找:

现在,L=1,R=8(要查找的数组范围,数组下标从1开始)

二分算法(查找),二分算法(查找),词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,更新,第2张
(图片来源网络,侵删)

mid=(L+R)/ 2 =4,arr[mid]=6        大于4,更新R=mid-1(因为是单调的)

L=1,R=3

mid=(L+R)/ 2 =2,arr[mid]=3        小于4,更新L=mid+1

L=3,R=3

mid=(L+R)/ 2 =3,arr[mid]=4        等于4,找到了

#include
#include
using namespace std;
const int N=100;
int arr[N];
int binarySearch(int arr[],int n,int x){
	sort(arr+1,arr+n+1);//先排序
	int L=1,R=n;
	int ans=-1;
	while(L>1;//右移一位即除以2
		if(arr[mid]==x){
			ans=mid;
			break;
		}
		if(arr[mid]>x){
			R=mid-1;
		}else{
			L=mid+1;
		}
	} 
	return ans;
}
int main(){
	int n;
	cin>>n;
	for(int i=1;i>arr[i];
	}
	int x;
	cin>>x;//要查找的数字 
	
	cout

免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,人围观)

还没有评论,来说两句吧...

目录[+]