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

2016-02-19 10:52 40 1 收藏

下面请跟着图老师小编一起来了解下C 二分查找 递归与非递归的实现代码,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!

【 tulaoshi.com - 编程语言 】

代码如下:

#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;
        }
    }

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

}

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;
        }
    }//上述循环结束后不一定就是 startends的  因为有break语句
    if(startends){
        mid=-1;
    }
    return mid;
}       

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1595961.html

延伸阅读
递归法和回溯法 有人说,回溯实际上是递归的展开,但实际上。两者的指导思想并不一致。 !-- frame contents -- !-- /frame contents -- 打个比方吧,递归法好比是一个军队要通过一个迷宫,到了第一个分岔口,有3条路,将军命令3个小队分别去探哪条路能到出口,3个小队沿着3条路分别前进,各自到达了路...
  0:几种数学式的定义: Fibonacci数列: function Fibonacci(n:integer):integer; begin   if n1 then result:=1   else result:=Fibonacci(n-1)+Fibonacci(n-2) end; 阶乘, function RankMulti(n:integer):integer; begin   if n1 then result:=1   else result:=Ra...
先引用using System.Runtime.InteropServices; 的命名空间, 然后在合适的位置加上如下代码就OK。。注意:Form1_Load和Form1_FormClosed不能直接copy哦~ 代码如下: [DllImport("user32")] public static extern bool RegisterHotKey(IntPtr hWnd,int id,uint control,Keys vk ); //注册热键的api [DllImport("user32")] public static e...
上网查了查,关于“递归”的文章可以说“汗牛充栋”——请原谅我在这里犯酸,我的意思是,写别人都写臭的东西让大家看,只是浪费大家的时间,所以我下面的东西应该是一些至少我看起来是新的东西,假如觉得有什么不清楚的,请参阅相关的文章(太多了)。 !-- frame contents -- !-- /frame contents -- 即使这样,这篇文章还是不能把...
实现步骤: 1.实现整个鼠标框选的几个事件(down、move、up),当鼠标点下记录鼠标框选的起点,鼠标抬起结束操作。 2.以鼠标框选过程中获取的鼠标坐标为基点计算框选的矩形的4点坐标,4点坐标以顺时针方向布点。 3.通过Shape.Path类实现在类上画出此矩形。 代码如下: 代码如下: namespace HostDemo {  public class HostCanvas : Ca...

经验教程

597

收藏

64
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部