ramshadom 2016-05-29 12:45 采纳率: 71.4%
浏览 1211

数据结构,查找,递归的问题

照样是一个比较细枝末节的问题,上图!

图片说明

参数表的情况是这样的:Table T是一个数组,KeyType K是想要查找的数字,int low是数组的区间最小值,int high就是数组区间的最大值。



这是折半查找法,用了递归



这一段代码的问题就是如果想查找后半部分的数字,会陷进递归里面跳不出来,具体的问题因为在下能力不足,描述不出来呀~真的很抱歉。拜托大神稍稍花些精力看吧~十分感谢十分感谢十分感谢。



如果光看这一段代码看不明白,以下是全部代码

 #include<iostream>
#define MAXNUM 30
using namespace std;
typedef int KeyType;
typedef int InfoType;

//构建元素类型
typedef struct
{
    KeyType key;
    InfoType i;
}ElemType;
//构建顺序表类型
typedef struct
{
    ElemType *R;
    int length;
}Table;

//折半查找法
int BinarySearch(Table T, KeyType K, int low, int high)
{
    int mid;
    while (low <= high)
    {
        mid = (low + high) / 2;
        if (K == T.R[mid].key)
            return mid;
        else
            if (K < T.R[mid].key)
                BinarySearch(T, K, low, mid - 1);
            else BinarySearch(T, K, mid + 1, high);
    }
    return 0;
}

void main()
{
    Table T;  //构建顺序表T
    T.R = new ElemType[MAXNUM];  //为顺序表构建空间
    KeyType K;
    cout << "输入即将输入的元素数量(大于8个)" << endl;
    cin >> T.length;
    while (T.length <= 8)
    {
        cout << "小于8个,请重新输入" << endl;
        cin >> T.length;
    }

    cout << "请有序输入元素" << endl;
    for (int i = 1; i <= T.length; i++)
        cin >> T.R[i].key;

    cout << "希望查找的元素为" << endl;
    cin >> K;

    int low = 1; 
    int high = T.length; 
    int result;
    result = BinarySearch(T, K, low, high);   //调用函数
    if (result == 0)
        cout << "希望查找的元素不在此数组内" << endl;
    else cout << "该元素的下标为:" << result << endl;
    system("pause");
}
  • 写回答

4条回答 默认 最新

  • variations 2016-05-29 13:05
    关注

    用了递归就不需要再用循环了,如果查找的数在后半段始终有low>high,因为在你的循环中始终没有改变low和high的值,所以循环不能结束。
    这是一个使用递归的
    int BinSearch(int Array[],int low,int high,int key)
    {
    if (low<=high)
    {
    int mid = (low+high)/2;
    if(key == Array[mid])
    return mid;
    else if(key return BinSearch(Array,low,mid-1,key);
    else if(key>Array[mid])
    return BinSearch(Array,mid+1,high,key);
    }

    这是一个使用循环的
    int BinSearch(int Array[],int SizeOfArray,int key)
    {
    int low=0,high=SizeOfArray-1;
    int mid;
    while (low<=high)
    {
    mid = (low+high)/2;
    if(key==Array[mid])
    return mid;
    if(key high=mid-1;
    if(key>Array[mid])
    low=mid+1;
    }
    return -1;
    }

    评论

报告相同问题?

悬赏问题

  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。