您的位置:首页 > 编程语言 > C语言/C++

二分查找算法-C++

2014-08-05 21:09 225 查看

二分查找

折半查找(::二分查找)

:前提,关键字有序,线性表顺序存储。

:思想,每次取中间记录作为比较对象

算法时间复杂度: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;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: