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

2016-02-19 10:52 43 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;
}

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

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 {

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

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

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

延伸阅读
递归法和回溯法 有人说,回溯实际上是递归的展开,但实际上。两者的指导思想并不一致。 !-- frame contents -- !-- /frame contents -- 打个比方吧,递归法好比是一个军队要通过一个迷宫,到了第一个分岔口,有3条路,将军命令3个小队分别去探哪条路能到出口,3个小队沿着3条路分别前进,各自到达了路...
SQLHelper.cs 代码如下: using System; using System.Collections.Generic; using System.Text; using System.Collections; using System.Data; using System.Data.SqlClient; using System.Configuration; namespace HelloWinForm.DBUtility { class SQLHelper { #region 通用方法 // 数据连接池 private SqlConnection con; /...
上网查了查,关于“递归”的文章可以说“汗牛充栋”——请原谅我在这里犯酸,我的意思是,写别人都写臭的东西让大家看,只是浪费大家的时间,所以我下面的东西应该是一些至少我看起来是新的东西,假如觉得有什么不清楚的,请参阅相关的文章(太多了)。 !-- frame contents -- !-- /frame contents -- 即使这样,这篇文章还是不能把...
不知道这样的演示效果怎么样,因为屏幕大小的问题没办法输出太多的数字,假如还有什么好的想法希望大家提出.#include graphics.h void fun(int x[],int y,int z);/*具体排序过程*/ void Init();/*图形初试化*/ void Close();/*图形关闭*/ void Put(int x[],int y);/*输出15个数字*/ void Up(int x);/*画上箭*/ void Down(...
3号盘子的目标柱是C,但是已经有了1号盘子,我们最直觉的反映就是——将碍事的盘子搬到另一根柱子上面去。于是,我们要做的是(规律2):保存当前柱的信息(柱子号、应该搬动的最下面一块盘子的号,和它的目标柱),以备当障碍清除后回到现在的柱子继续搬,将当前柱转换为碍事的盘子所在的柱子。假设这样若干步后,我们将7号盘子从A搬到了C,此...

经验教程

915

收藏

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