zoukankan      html  css  js  c++  java
  • 二分查找


    在数组int[] a = {1,2, 3, 4, 5},查找2或4会出现start==end的情况;
    start =0 end =4 => mid = 2

    二分取中比较查找算法仅适用于在有序的数组中查找特定元素的算法。

    非递归实现代码,默认被查找数组为升序排列。

     1 int BinarySearch(int arry[],int length,int key)
     2 {
     3     int low = 0,high = length-1, mid;//[low,high]待查元素下标区间
     4     while(low<=high)//只要还有待查元素
     5     {
     6         /*二分取中*/
     7         mid = (low+high)/2;
     8         /*比较查找*/
     9         if(arry[mid]<key)//只可能在中间元素右侧
    10             low = mid+1;
    11         else if(key<arry[mid])//只可能在中间元素左侧
    12             high = mid-1;
    13         else//找到
    14             return mid;
    15     
    16     }
    17     return -1;//待查元素找完了,也没找到该值
    18 
    19 }

     递归实现代码,默认被查找数组为升序排列。

    int bsearch(int *p,int low,int high,int key)
    {    
        /*二分取中*/
        int mid=(low+high)/2;
        /*两类递归*/
        if(low>high)//已无待查元素
          return -1;
        if(key==p[mid])
          return mid;
        /*两类递进*/
        if(key>p[mid])
          return  bsearch(p,mid+1,high,key);
        else 
          return bsearch(p,low,mid-1,key);
    }
  • 相关阅读:
    mongoDB简介
    Java中Collection和Collections的区别
    java内存模型-总结
    java内存模型-final
    java内存模型-锁
    java内存模型-volatile
    java内存模型-顺序一致性
    java内存模型-重排序
    java内存模型-基础
    FTPClient listFiles 阻塞问题
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/4321328.html
Copyright © 2011-2022 走看看