用户注册



邮箱:

密码:

用户登录


邮箱:

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

发表随想


还能输入: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、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

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

加载中,请稍后...