代码
#include<iostream>
using namespace std;
#define MAXSIZE 100
#define OVERFLOW -2
#define OK 1
typedef int KeyType;
typedef char InfoType;
typedef struct{
KeyType key;
InfoType otherinfo;
}ElemType;
typedef struct{
ElemType *R;
int length;
}SSTable;
//初始化
int Init_SSTable(SSTable &ST){
ST.R=new ElemType[MAXSIZE];
if(!ST.R) return(OVERFLOW);
ST.length=0;
return OK;
}
//创建
void Create_SSTable(SSTable &ST,int a[],int n){
for(int i=1;i<=n;i++){
ST.R[i].key=a[i-1];
++ST.length;
}
}
//显示
void Show_SSTable(SSTable ST,int n){
for(int i=0;i<=n;i++) cout<<ST.R[i].key<<' ';
}
//查找
int Search_Seq(SSTable ST,KeyType key){
ST.R[0].key=key;
int i;
for(i=ST.length;ST.R[i].key!=key;--i);
return i;
}
//折半查找(非递归)
//int Search_Bin(SSTable ST,KeyType key){
// int low=1,high=ST.length;
// while(low<=high){
// int mid=(low+high)/2;
// if(ST.R[mid].key==key) return mid; //找到
// else{
// if(key<ST.R[mid].key) high=mid-1;
// else low=mid+1;
// }
// }
// return 0; //未找到
//}
//折半查找(递归)
int Search_Bin(SSTable ST,KeyType key,int low,int high){
if(low>high) return 0; //未找到
int mid=(low+high)/2;
if(ST.R[mid].key==key) return mid; //找到
else{
if(key<ST.R[mid].key) Search_Bin(ST,key,low,mid-1); //在前半区间递归查找
else Search_Bin(ST,key,mid+1,high); //在后半区间递归查找
}
}
int main(){
SSTable ST;
int key;
int a[]={5,7,19,21,37,56,64,75,88,80,92}; //有序
Init_SSTable(ST);
Create_SSTable(ST,a,11);
Show_SSTable(ST,11);
cout<<endl<<"请输入要查找的数:";
cin>>key;
//cout<<Search_Seq(ST,key);
cout<<"该数所在位置:"<<Search_Bin(ST,key,1,11);
return 1;
}
运行结果