折半查找以及折半查找递归注意点示范:同时附带return 值。

代码演示在ubuntu下gcc演示:详细参考数据结构C语言版

#include<stdio.h>
#define COMPARE(x,y) (((x)<(y))?-1:((x)==(y))?0:1)//折半查找的迭代函数
int binsearch(int list[],int searchNum,int left,int right)
{
    int middle;
    while(left<=right)
    {
        middle=(left+right)/2;
        switch(COMPARE(list[middle],searchNum))
        {
            case -1:left=middle + 1;
                    break;
            case 0 :return middle;
            case 1 : right = middle -1;
        }
    }
    return -1;
}
//目前初步来说将一个函数转换为一个递归函数,必须有两个要素:构造递归调用终止的边界条件&&实现递归调用,使得每次递归调用都能够向最终解逼近一步。
int binsearch(int list[],int searchNum,int left,int right)//折半查找的递归函数
{
    int middle;
    while(left<=right)
    {
        middle=(left+right)/2;
        switch(COMPARE(list[middle],searchNum))
        {
            case -1:return binsearch(list,searchNum,middle + 1,right);
            case 0 :return middle;
            case 1 :return binsearch(list,searchNum,left,middle - 1);
        }
        }
    return -1;
}


//关于return -1/0/1的意思,折半查找函数中,如果返回为-1,就是说明没有找到相等的数据,非正常结束。return 0表示正常退出,return 非0表示异常结束。

 

转载于:https://www.cnblogs.com/dog-and-cat/p/6636941.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于折半查找算法的非递归递归算法,我可以回答你。首先,折半查找算法(Binary Search)也被称为二分查找算法,在有序数组查找目标元素的过程,将数组折半,取间位置作为比较对象,如果间元素等于要查找的元素,则查找成功;如果间元素比要查找的元素大,则在左半部分继续查找;反之,在右半部分查找,直到找到目标元素或查找失败。折半查找算法的时间复杂度为O(log n)。 非递归实现: int binary_search(int arr[], int left, int right, int target){ while(left <= right){ // 取间位置 int mid = (left + right) / 2; // 如果间元素等于要查找的元素,则查找成功 if(arr[mid] == target){ return mid; } // 如果间元素比要查找的元素大,则在左半部分继续查找 else if(arr[mid] > target){ right = mid - 1; } // 在右半部分查找 else{ left = mid + 1; } } // 查找失败 return -1; } 递归实现: int binary_search(int arr[], int left, int right, int target){ if(left > right){ // 查找失败 return -1; } else{ // 取间位置 int mid = (left + right) / 2; // 如果间元素等于要查找的元素,则查找成功 if(arr[mid] == target){ return mid; } else if(arr[mid] > target){ // 在左半部分查找 return binary_search(arr, left, mid - 1, target); } else{ // 在右半部分查找 return binary_search(arr, mid + 1, right, target); } } } 以上是折半查找算法的非递归递归实现,希望回答能够帮到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值