二分查找算法-C++

二分查找

折半查找(::二分查找)
:前提,关键字有序,线性表顺序存储。
:思想,每次取中间记录作为比较对象 

算法时间复杂度:O(logn)

时间复杂度无非就是while循环的次数!
总共有n个元素,渐渐跟下去就是n,n/2,n/4,....n/2^k,其中k就是循环的次数,假设你比较的只剩下最后一个数了(最糟糕的情况),即令n/2^k=1,可得k=log2n,(是以2为底,n的对数),所以时间复杂度可以表示为O(log2n)

#include<iostream>
#include<string>
using namespace std;
int BinarySearch(int *pdata,int length,int key) //假设序列是升序排列data2
{
	int high,low,mid;
	high=length-1;
	low=0;
	while (low<=high)
	{
		mid=(low+high)/2;
		if (key>pdata[mid])  //key大,key在右半段,mid++ ->low
		{
			low=mid+1;
		}
		else
			if (key<pdata[mid])  //key小,key在左半段
			{
				high=mid-1;
			}
			else
				return mid;
		cout<<"::"<<low<<"::"<<high<<endl;
	}
	return -1;
}
int main()
{
	int data[]={6,5,4,3,2,1};
	int data2[]={1,2,3,4,5,6};
	int data3[]={9,8,7,6,5,4,3,2,1};
	int data4[]={1,2,3,4,5,6,7,8,9};
	cout<<"----------------------------------"<<endl;
	int num=BinarySearch(data4,9,7);
	cout<<"It's the number of "<<num<<"in the array!"<<endl;
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值