zoukankan      html  css  js  c++  java
  • 二分查找的递归实现和循环实现

    用递归的方法实现二分法查找(二分法查找的前提是数据有序)

    #include <stdio.h>
    #include <stdlib.h>
    // 二分查找-数据有序
    int _binary_find(int arr[],int left,int right,int key)
    {
      if(left >= right) return -1;
      int p = (left+right)/2;
      if(arr[p] == key) return p;
      if(arr[p] > key)
      return _binary_find(arr,left,p,key);
      else
      return _binary_find(arr,p+1,right,key);
    }

    int binary_find(int arr[],size_t len,int key)
    {
      return _binary_find(arr,0,len,key);
    }
    int main()
    {
      int arr[10] = {};
      for(int i=0; i<10; i++)
      {
        arr[i] = i+10;
        printf("%d ",arr[i]);
      }
      printf(" ");
      printf("%d ",binary_find(arr,10,18));
    }

    下面是我用循环的方法实现的代码

    #include <stdio.h>
    #include <stdlib.h>
    // 使用循环实现二分查找
    int binary_find(int arr[],size_t len,int key)
    {
      int left = 0 , right = len;
      while(left < right)
      {
        int p = (left + right) / 2;
        if(arr[p] == key) return p;
        if(arr[p] > key)
        right = p;
        else
        left = p+1;
      }
      return -1;
    }
    int main()
    {
      int arr[10] = {};
      for(int i=0; i<10; i++)
      {
        arr[i] = i+10;
        printf("%d ",arr[i]);
      }
      printf(" ");
      printf("%d ",binary_find(arr,10,17));
    }

  • 相关阅读:
    iphone自动识别电话以及变色的解决
    chrome浏览器模拟微信
    获取一个图片的真实宽高
    iview插件
    vue aixos请求json
    ajax请求文件流下载
    检测打开设备
    轮播图
    rem适配
    easyui月份插件如何监听
  • 原文地址:https://www.cnblogs.com/xiwen2017/p/10155139.html
Copyright © 2011-2022 走看看