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;

T的elem没初始化,没有申请内存空间。
而且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);
追问

哦,犯了这种错误,还是上级少了啊。
好像又有错误报告

参考技术A 一楼回答不错,最后的问题,可以把前面的变量再看看 参考技术B .........................

折半查找的递归算法

折半查找的递归算法
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语言折半查找之递归算法的主要内容,如果未能解决你的问题,请参考以下文章

按要求设计递归算法。只需写出伪代码或画流程图,不需语言实现,但算法必须完整清晰。

C语言 用递归算法来解决猴子吃桃问题。:一天一只猴子摘下一堆桃子,吃了一半,觉得不过瘾,又多吃了一

C语言 背包问题 递归算法

分治算法----折半查找----递归二分算法

折半查找的递归算法

C语言试题177之实现二分查找算法,折半查找算法