• 二分搜索(续)


          上一节 末尾提到了一个问题,在顺序数组中找到t值第一次出现的位置。

    其实这也是一种二分搜索的变形。

    思路如下:我仍然使用l和u作为数组的边界值,t就包含在l和u指示的数组范围中。但不变关系式变为x[l]<t<=x[u]和l<u,此时,我们假设n>=0,x[-1]<t以及 x[n]>=t(程序中并没有这两个元素)。二分搜索的代码如下

      

     1 int binarySearch(int a[],int n,int t)//n为a数组的长度,t为寻找的元素
     2 {
     3     
     4     if(n<=0)
     5         {
     6             return -1;
     7         }
     8     
     9     int low=-1;
    10     int high=n;
    11     int middle;
    12     while(low+1!=high)
    13     {
    14         middle=(low+high)/2;
    15         if(a[middle]<t)
    16             {
    17                 low=middle;
    18             }
    19             else  //此时的条件改为a[middle]>=t而不是原先的程序需要比较两次
    20             {
    21                     high=middle;
    22             }
    23                 
    24     }
    25     if(high>=n||a[high]!=t)
    26         {
    27             return -1;
    28         }
    29         else
    30             {
    31                 return high;
    32             }
    33 }

      


    此程序的好处是在while循环中只需要将数组a中的值与t值比较一次,而不是前文中的两次。有时候看似很细微的差别就可以对性能造成举足轻重的影响。

  • 相关阅读:
    java笔记1
    mysql 5.5 zip配置安装
    centos 6.5 双网卡 上网 virtualbox nat hostonly
    MongoDB Chapter1:Introduction
    windows下在virtualbox中的Fuel Openstack 9.0 安装过程
    centos 7 install gnome etc
    mongodb4简明笔记
    mongodb windows 4 zip安装
    VB 提示音编歌曲
    VB 快捷键
  • 原文地址:https://www.cnblogs.com/fightingxu/p/2820816.html
Copyright © 2020-2023  润新知