折半查找的递归算法

来源:互联网 发布:360软件小助手独立 编辑:程序博客网 时间:2024/05/29 15:02

大家好呀~我是一个大一的学生,计算机专业。一直在学习代码,可是以前都没有过记录和总结,感到可惜,所以这次开了个博客,专门用来记录我写的好的代码。

可能很多地方做得不好,希望大家给我意见。吐舌头


这个算法是用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_Binvoid Show_End(int result,int testkey){if(result>100)cout<<"未找到关键字: "<<testkey<<endl;elsecout<<"找到"<<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);}


0 0
原创粉丝点击