C 二分查找 递归与非递归的实现代码

 更新时间:2013年03月25日 14:27:53   作者:  
C 二分查找 递归与非递归的实现代码,需要的朋友可以参考一下

复制代码 代码如下:

#include <stdio.h>

int binSearch(int arr[], int low, int high, int key);
int binSearch2(int arr[], int low, int high, int key);
int binSearch3(int arr[],int start,int ends,int key);
int main() {
    int arr[]={3,8,11,15,17,22,23,26,28,29,34};
    //printf("%d",binSearch(arr,0,10,26));
    printf("%d",binSearch3(arr,0,10,26));
    return 1;
}

int binSearch(int arr[], int low, int high, int key) {
    int flag=-1;
    int mid = (low + high) / 2;
    if (low > high) {
        flag= -1;
    } else {

        if (arr[mid] < key) {
            flag= binSearch(arr, mid + 1, high, key);
        } else if (arr[mid]>key) {
            //比如要找的节点在下面这一层   那么这一层会返回下标上来 用flag接住嘛...
            flag= binSearch(arr,low,mid-1,key);//又差一点忘记了用flag取接住返回值了

        } else {
            flag= mid;
        }
    }
    return flag;
}


//ok==============================
int binSearch2(int arr[], int low, int high, int key) {
    int mid = (low + high) / 2;
    if (low > high) {
        return -1;
    } else {

        if (arr[mid] < key) {
            return binSearch2(arr, mid + 1, high, key);
        } else if (arr[mid]>key) {
            return binSearch2(arr,low,mid-1,key);
        } else {
            return mid;
        }
    }

}

int binSearch3(int arr[],int start,int ends,int key){
    int mid=-1;
    while(start<=ends){
        mid=(start+ends)/2;
        if(arr[mid]<key){
            start=mid+1;
        }else if(arr[mid]>key){
            ends=mid-1;
        }else{
            break;
        }
    }//上述循环结束后不一定就是 start>ends的  因为有break语句
    if(start>ends){
        mid=-1;
    }
    return mid;
}       

相关文章

  • C语言中冒泡排序算法详解

    C语言中冒泡排序算法详解

    大家好,本篇文章主要讲的是C语言中冒泡排序算法详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • C++中简单的文本文件输入/输出示例详解

    C++中简单的文本文件输入/输出示例详解

    C++程序把输入和输出看作字节流,输入时程序从输入流中抽取字节,输出时程序将字节插入到输出流中,下面这篇文章主要给大家介绍了关于C++中简单的文本文件输入/输出的相关资料,需要的朋友可以参考下
    2021-12-12
  • C语言实现顺序表的顺序查找和折半查找

    C语言实现顺序表的顺序查找和折半查找

    这篇文章主要为大家详细介绍了C语言实现顺序表的顺序查找和折半查找,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • C++特性之智能指针shared_ptr详解

    C++特性之智能指针shared_ptr详解

    shared_ptr是C++11提供的一种智能指针类,它足够智能,可以在任何地方都不使用时自动删除相关指针,从而帮助彻底消除内存泄漏和悬空指针的问题。本文主要是来和大家聊聊shared_ptr的使用,需要的可以参考一下
    2022-12-12
  • C++使用windwos api实现获取计算机基本信息

    C++使用windwos api实现获取计算机基本信息

    这篇文章主要为大家详细介绍了C++如何使用windwos api实现获取windwos计算机的基本信息,包括计算机名称、操作系统版本、处理器信息等,需要的可以参考一下
    2023-04-04
  • c++获取进程信息列表和进程所调用的dll列表

    c++获取进程信息列表和进程所调用的dll列表

    这篇文章主要介绍了c++获取进程信息列表和进程所调用的dll列表,大家参考使用吧
    2013-11-11
  • C++实现移动立方体示例讲解

    C++实现移动立方体示例讲解

    这篇文章主要介绍了C++实现移动立方体,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • C语言实现消消乐小游戏

    C语言实现消消乐小游戏

    这篇文章主要为大家详细介绍了C语言实现消消乐小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • C语言 二叉查找树性质详解及实例代码

    C语言 二叉查找树性质详解及实例代码

    这篇文章主要介绍了C语言 二叉查找树性质详解及实例代码的相关资料,需要的朋友可以参考下
    2017-03-03
  • C++项目开发实现图书管理系统

    C++项目开发实现图书管理系统

    这篇文章主要为大家详细介绍了C++项目开发实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论