折半查找算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
折半查找
折半查找也称二分查找,但它要求查找表必须是顺序结构存储且表中数据元素按关键码有序。折半查找在查找成功时,所进行的关键码比较次数至多为⎡⎤)1(log 2+n 。平均查找长度为1)1(log 2-+=n ASL ,时间复杂度是)(log 2n O 。
折半查找的程序代码如下:
#include
#define MAXSIZE 10
typedef int DataType;
typedef struct S_T{
DataType data[MAXSIZE];
int length;
}S_T;
void CreateS_T(S_T *t){
int i;
cout<<"请输入要建立的顺序表的长度"< cin>>t->length; t->data[0]='z'; for(i=1;i<=t->length;i++) cin>>t->data[i]; } int Binary_Search(S_T *t,DataType kx){ int low,high,mid; int count; int flag; low=1; count=1; high=t->length; flag=0; while(low<=high){ mid=(low+high)/2; if(kx high=mid-1; else if(kx>t->data[mid]) low=mid+1; else{ flag=mid; break; } count++; } cout<<"查找的次数是:"< return flag; } void main(){ int i; DataType kx; S_T *t=new S_T; CreateS_T(t); cout<<"请输入要查找的的元素:"< cin>>kx; i=Binary_Search(t,kx); if(i==0) cout<<"找不到所要查找的元素!"< else cout<<"所要查找的数据元素"<