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

       二分查找:

       二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

         //考虑边界条件

     1 //[]闭区间
     2 int Binaryserach(int *array, int size, int key)
     3 {
     4     assert(array != NULL);
     5     int left = 0;
     6     int right = size - 1;
     7     while (left <= right)
     8     {
     9         int mid =( (right - left) >>1) + left;
    10         if (array[mid] > key)
    11         {
    12             right = mid - 1;
    13         }
    14         else if (array[mid] < key)
    15         {
    16             left = mid + 1;
    17         }
    18         else
    19         {
    20             return mid;
    21         }
    22     }
    23     return -1;
    24 }
     1 //[)半开半闭区间
     2 int Binaryserach(int *array, int size, int key)
     3 {
     4         assert(array != NULL);
     5         int left = 0;
     6         int right = size;
     7         while (left < right)
     8         {
     9             int mid =( (right - left) >>1) + left;
    10             if (array[mid] > key)
    11             {
    12                 right = mid ;
    13             }
    14             else if (array[mid] < key)
    15             {
    16                 left = mid + 1;
    17             }
    18             else
    19             {
    20                 return mid;
    21             }
    22         }
    23         return -1;
    24 }

       /*递归实现(递归算法解题通常显得比较简洁,但递归算法解题的运行效率较低;
    在递归调用的过程中系统为一层返回点、局部变量开辟了栈来存储,空间复杂度增大。一般情况下不建议用递归算法设计程序)*/

     1 int Binaryserach(int *array, int left,int right,int key)
     2 {
     3     assert(array != NULL);
     4     if (left <= right)
     5     {
     6         int mid = ((right - left) >> 1) + left;
     7         if (array[mid] == key)
     8         {
     9             return mid;
    10         }
    11         if (array[mid] > key)
    12         {
    13             return Binaryserach(array, left, mid - 1, key);
    14         }
    15         else
    16         {
    17             return Binaryserach(array, mid + 1, right, key);
    18         }
    19     }
    20     else 
    21         return -1;
    22 }
  • 相关阅读:
    【反射】Java反射机制
    Composer教程之常用命令
    Composer教程之基础用法
    Composer教程之初识Composer
    Composer 的结构详解
    现代 PHP 新特性系列(七) —— 内置的 HTTP 服务器
    现代 PHP 新特性系列(一) —— 命名空间
    现代 PHP 新特性系列(二) —— 善用接口
    现代 PHP 新特性系列(三) —— Trait 概览
    现代 PHP 新特性系列(四) —— 生成器的创建和使用
  • 原文地址:https://www.cnblogs.com/-zyj/p/5499576.html
Copyright © 2011-2022 走看看