折半查找
来源:互联网 发布:js引用js文件 编辑:程序博客网 时间:2024/04/28 03:23
#include<iostream.h>
#include<malloc.h>
#define max 30//顺序表元素最大数
typedef struct
{
int key;//关键字项
}RedType;
typedef struct
{
RedType r[max];//r[0]闲置或用作哨兵单元
}SqList;
int N=10;
int search_bin(SqList &L,int key);//函数声明
void main()
{
SqList L;
int key;
for(int i=1;i<=N;i++)//生成递增序列1~N
{
cin>>L.r[i].key;//按递增输入
cout<<L.r[i].key<<" ";//输出递增序列
}
cout<<endl;
cout<<"请输入一个要查找的关键字:"<<endl;
cin>>key;//要查找的关键字
cout<<"查找的位置为:"<<search_bin(L,key)<<endl;//若为零则表示没有查找到
}
int search_bin(SqList &L,int key)//折半查找算法
{
int low=1,high=N,mid;
while(low<=high)
{
mid=(low+high)/2;
if(L.r[mid].key==key)return mid;
else if(L.r[mid].key>key)high=mid-1;
else low=mid+1;
}
return 0;
}
#include<malloc.h>
#define max 30//顺序表元素最大数
typedef struct
{
int key;//关键字项
}RedType;
typedef struct
{
RedType r[max];//r[0]闲置或用作哨兵单元
}SqList;
int N=10;
int search_bin(SqList &L,int key);//函数声明
void main()
{
SqList L;
int key;
for(int i=1;i<=N;i++)//生成递增序列1~N
{
cin>>L.r[i].key;//按递增输入
cout<<L.r[i].key<<" ";//输出递增序列
}
cout<<endl;
cout<<"请输入一个要查找的关键字:"<<endl;
cin>>key;//要查找的关键字
cout<<"查找的位置为:"<<search_bin(L,key)<<endl;//若为零则表示没有查找到
}
int search_bin(SqList &L,int key)//折半查找算法
{
int low=1,high=N,mid;
while(low<=high)
{
mid=(low+high)/2;
if(L.r[mid].key==key)return mid;
else if(L.r[mid].key>key)high=mid-1;
else low=mid+1;
}
return 0;
}