Java教程

二分查找算法

本文主要是介绍二分查找算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

二分查找算法
问题一、在一个有序的序列(不降序列)中查找指定值的算法,查找成功返回它所在的位置,否则返回-1
int binarySearch(int a[],int l,int r,int x)
{
     int ans=-1;
     while(l<=r)
     {
          int m=l+(r-l)/2;
          if (a[m]==x)
          {
               ans=m;break;
          }
          if (a[m]<x)
               l=m+1;
          else
               r=m-1;
         }   
         return ans;
}
问题二、如果要查找指定值的最早的下标,如何实现
int binarySearch(int a[],int l,int r,int x)
{
     int ans=-1;
    while(l<=r)
    {
          int m=l+(r-l)/2;
          if (a[m]==x)
         {
               ans=m;r=m-1;
         }
         if (a[m]<x)
              l=m+1;
         else
             r=m-1;
         }
         return ans;
}
问题三、要查找第一个大于等于指定值的下标?
int binarySearch(int a[],int l,int r,int x)
{
      int ans=-1;
      while(l<=r)
     {
          int m=l+(r-l)/2;
         if (a[m]>=x)
         {
              ans=m;r=m-1;
         }
        else
              l=m+1;
        }
        return ans;
}
问题四、要查找第一个大于指定值的下标?
int binarySearch(int a[],int l,int r,int x)
{
     int ans=-1;
     while(l<=r)
     {
          int m=l+(r-l)/2;
          if (a[m]>x)
          {
               ans=m;r=m-1;
          }
          else
               l=m+1;
     }
     return ans;
}

 

这篇关于二分查找算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!