标签:
二分查找是一种效率比较高的查找算法,但是它依赖于数组有序的存储,二分查找的过程可以用二叉树来形容描述:把当前查找区间的中间位置上的结点作为根,左子表和右子表中的结点分别作为根节点的左子树和右子树。由此得到的二叉树,称为描述二分查找树的判定树(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