标签:
二分查找是一种效率比较高的查找算法,但是它依赖于数组有序的存储,二分查找的过程可以用二叉树来形容描述:把当前查找区间的中间位置上的结点作为根,左子表和右子表中的结点分别作为根节点的左子树和右子树。由此得到的二叉树,称为描述二分查找树的判定树(Decision Tree)或比较树(Comprision Tree)。时间复杂度为O(logN)。10个结点的判定树如下:
因此,二分查找特别适用于那种一经建立就很少改动、而又经常需要查找的线性表。对于那些查找少而又经常需要改动的线性表,可采用链表作存储结构,进行顺序查找。但是链表无法是实现二分查找。
二分查找树的代码实现:
#include<iostream>
#include <list>
#include <algorithm>
using namespace std;
int Two_Find(int *data,int n,int findnum)
{
int high=n-1;
int low=0;
int mid;
while(low<=high)
{
mid=(low+high)/2;
if(data[mid]==findnum)//找到;
{
return findnum;
}
else//没找到;
{
if(findnum < data[mid])//要找的数在根节点的左边;
high=mid-1;
else
low=mid+1;
}
}
return -1;
}
int main()
{
int data[10]={1,2,3,4,5,6,7,8,9,11};
int number=Two_Find(data,10,12);
if(number<0)
{
cout<<"NO exist"<<endl;
}
else
{
cout<<number<<"is exist!"<<endl;
}
system("pause");
return 0;
}
标签:
原文地址:http://blog.csdn.net/gogokongyin/article/details/51211296