大家好呀~我是一个大一的学生,计算机专业。一直在学习代码,可是以前都没有过记录和总结,感到可惜,所以这次开了个博客,专门用来记录我写的好的代码。
可能很多地方做得不好,希望大家给我意见。
这个算法是用C++写的折半查找的算法,用的是递归算法。
//算法 折半查找的递归算法
#include<iostream>
using namespace std;
#define MAXSIZE 100
#define OK 1;
typedef struct{
int key;//关键字域
}ElemType;
typedef struct{
ElemType *R;
int length;
}SSTable;
int InitList_SSTable(SSTable &L)
{
L.R=new ElemType[MAXSIZE];
if (!L.R)
{
cout<<"初始化错误";
return 0;
}
L.length=0;
return OK;
}
int Insert_SSTable(SSTable &L)
{
int j=1;
for(int i=1;i<MAXSIZE;i++)
{
L.R[i].key=j;
L.length++;
j++;
}
return 1;
}
int MySearch_Bin(SSTable ST,int key,int low,int high)
{
// 在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数值为
// 该元素在表中的位置,否则为0
int mid;
if(low <=high)
{
mid=(low+high) / 2;
if(key==ST.R[mid].key) return mid;
else if(key <ST.R[mid].key)
{
high=mid-1;
MySearch_Bin(ST,key,low,high);
}
else
{
low =mid+1;
MySearch_Bin(ST,key,low,high);
}
}
}// Search_Bin
void Show_End(int result,int testkey)
{
if(result>100)
cout<<"未找到关键字: "<<testkey<<endl;
else
cout<<"找到"<<testkey<<"位置为: "<<result<<endl;
return;
}
int main( )
{
SSTable ST;
InitList_SSTable(ST);
Insert_SSTable(ST);
int testkey1,testkey2;
cout<<"请依次输入两个关键字(用回车隔开): ";
cin>>testkey1;
cin>>testkey2;
int result;
int low=1;
int high=ST.length; //置查找区间初值
result=MySearch_Bin(ST, testkey1,low,high);
Show_End(result,testkey1);
result=MySearch_Bin(ST, testkey2,low,high);
Show_End(result,testkey2);
}