C语言折半查找之递归算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言折半查找之递归算法相关的知识,希望对你有一定的参考价值。
大家看看我的这段程序有什么问题呢?编辑ok,但是运行出错。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
using namespace std;
typedef struct
int key;
ch;
typedef struct
ch *elem;
int length;
SSTable;
int len (int a[])
int k;
for(k=0;a[k]!=-1;k++);
return k;
void Create(SSTable T,int a[])
int j;
for(j=1;j<len(a)+1;j++)T.elem[j].key=a[j];
T.length=len(a);
int Search_Seq(SSTable T,int key)
int i;
T.elem[T.length+1].key=key;
for(i=1;T.elem[i].key==key;i++);
if(i>=T.length+1) return 0;
else return i;
int Search_Bin (SSTable ST, int key )
int low, high, mid;
low = 1; high = ST.length;
while (low <= high)
mid = (low + high) / 2;
if (key==ST.elem[mid].key) return mid;
else if (key<ST.elem[mid].key) high = mid - 1;
else low = mid + 1;
return 0;
int D(SSTable ST,int key,int low,int high)
int lo, hig, mi;
lo = 1; hig = ST.length;
mi = (lo + hig) / 2;
if(ST.elem[mi].key==key) return mi;
if(ST.elem[mi].key>key) return D(ST,key,lo,mi-1);
if(ST.elem[mi].key<key) return D(ST,key,mi+1,hig);
return 0;
int main()
SSTable T;
printf("请输入顺序表,以-1结束!\n");
int a[100];
int k=0;
while (true)
scanf("%d",&a[k]);k++;
if (a[k-1]==-1)break;
Create(T,a);
printf("\n");
printf("输入要查找的数:");
int key;scanf("%d",&key);
if(!Search_Seq(T,key))printf("顺序查找没有找到!\n");
else printf("找到了,%d是第%d个!\n",key,Search_Seq(T,key));
if(!Search_Bin(T,key))printf("折半查找没有找到!\n");
else printf("找到了,%d是第%d个!\n",key,Search_Bin(T,key));
if(!D(T,key,1,T.length))printf("递归查找没有找到!\n");
else printf("找到了,%d是第%d个!\n",key,D(T,key,1,T.length) );
system("pause");
return 0;
而且Create的参数T必须要用引用传递,不然main中执行完Create(T,a)后,T的值不会变化 。
void Create(SSTable &T,int a[])
int j;
T.elem=new ch[len(a)];
for(j=1;j<len(a)+1;j++)T.elem[j].key=a[j];
T.length=len(a);
追问
哦,犯了这种错误,还是上级少了啊。
好像又有错误报告
折半查找的递归算法
折半查找的递归算法
int binary_search(int r[],int k,int low,int high)
int mid;
if(low<=high)
mid = (high+low)/2;
if(r[mid]==k)
retrun mid;
else
if(r[mid]>k)
return binary_search(r,k,low,mid-1);
else
return binary_search(r,k,mid+1,high);
else
return 0;
以上是关于C语言折半查找之递归算法的主要内容,如果未能解决你的问题,请参考以下文章
按要求设计递归算法。只需写出伪代码或画流程图,不需语言实现,但算法必须完整清晰。