用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

数据结构与算法----3.1 实现递归形式的折半查找算法

2019-07-21 作者: Ryan2019举报

[c++]代码库

#include <iostream>
using namespace std;
typedef int KeyType;
struct ElemType {KeyType key;};
struct SList {ElemType *r;int length;};

int Search_Bin(SList &L,KeyType k);//有序表的折半查找算法
bool ListCreate(SList &L,int n,KeyType a[]);
int ReSea_Bin(SList L,KeyType k,int a,int b);
int ReSea_Bin(SList L,KeyType k);//递归
int main()
{
	SList L; int length=11;
	//KeyType k=1;
	//KeyType k=67;
	KeyType k=67;
	KeyType a[11]={01,03,11,15,17,26,33,45,53,67,72};
	ListCreate(L,length,a);
	cout<<"原顺序表为"<<endl;
	for(int j=0;j<length;j++){cout << L.r[j].key<<"  ";}
	int b=ReSea_Bin(L,k);
	if(b>=0)
		cout<<"\n在顺序表中"<<k<<"的位置是:"<<b<<endl;
	else
		cout<<"\n顺序表中未找到"<<k<<endl;
	return 0;
}
int ReSea_Bin(SList L,KeyType k,int a,int b)
{
	int m;
	if(b<a)return -1;
	m=(a+b)/2;
	if(L.r[m].key==k)return m;
	if(L.r[m].key>k)	return  ReSea_Bin(L,k,a,m-1);
	else	return  ReSea_Bin(L,k,m+1,b);
}
int ReSea_Bin(SList L,KeyType k)
{
	int a=0,b=L.length-1;
	return ReSea_Bin(L,k,a,b);
}
int Search_Bin(SList &L,KeyType k)
{
	int a,m,b;
	a=0;b=L.length;
	while(a<=b)
	{
		m=(a+b)/2;
		if(L.r[m].key==k)return m;
		else if(L.r[m].key<k) a=m+1;
		else b=m-1;
	}
	return -1;
}
bool ListCreate(SList &L,int n,KeyType a[])
{
	int i;
	L.r=new ElemType[n];
	if(!L.r)	return false;
	L.length=n;
	for(i=0;i<n;i++)
	{
		L.r[i].key=a[i];
	}
	return true;
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...