zoukankan      html  css  js  c++  java
  • 二分搜索(续)

          上一节 末尾提到了一个问题,在顺序数组中找到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值比较一次,而不是前文中的两次。有时候看似很细微的差别就可以对性能造成举足轻重的影响。

  • 相关阅读:
    javascript-事件
    javascript-数组简单的认识
    javascript-dom操作
    JavaScript入门
    python语言程序设计?
    4,14
    python第二周。2019.4.13
    python第二周
    python语言程序设计9
    python语言程序设计8
  • 原文地址:https://www.cnblogs.com/fightingxu/p/2820816.html
Copyright © 2011-2022 走看看