zoukankan      html  css  js  c++  java
  • PHP算法之二分查找和顺序查找

    一、二分查找 (数组里查找某个元素)

     1 /**
     2  * 二分查找 (数组里查找某个元素)
     3  * $k为要查找的关键字(注:待查找的数组元素为奇数个)$low为查找范围的最小键值,$high为查找范围的最大键值  
     4  */
     5 $low = min(array_keys($array));
     6 $high = max(array_keys($array));
     7 function dichotomy_search($array, $low, $high, $k) {
     8     if ($low <= $high) {
     9         $mid = intval ( ($low + $high) / 2 );
    10         if ($array [$mid] == $k) {
    11             return $mid;
    12         } elseif ($k < $array [$mid]) {
    13             return dichotomy_search ( $array, $low, $mid - 1, $k );
    14         } else {
    15             return dichotomy_search ( $array, $mid + 1, $high, $k );
    16         }
    17     }
    18     return -1;
    19 }

    二、顺序查找 (数组里查找某个元素)

     1 /**
     2  * 顺序查找 (数组里查找某个元素)
     3  * $array为数组,$k为要查找的值  
     4  */
     5 function sequential_search($array, $k) {
     6     $n = count($array);
     7     $array[$n] = $k;                //新建一个元素,并将k存放进去  
     8     for($i = 0; $i < $n; $i++) {
     9         if($array[$i] == $k) {
    10             break;
    11         }
    12     }
    13     if($i < $n) {                 //如果在新元素的前面找到了要找的值,则返回该值 
    14         return $i;
    15     } else {
    16         return -1;
    17     }
    18 }
  • 相关阅读:
    SNOI 2019 字符串
    1068: [SCOI2007]压缩
    POJ 1848 Tree 树形DP
    BZOJ bzoj1396 识别子串
    BZOJ 4503: 两个串
    BZOJ 2302: [HAOI2011]Problem c(数学+DP)
    BZOJ 3157: 国王奇遇记 (数学)
    CF_528D
    BZOJ 3000: Big Number (数学)
    新の开始
  • 原文地址:https://www.cnblogs.com/h07061108/p/sequential_dichotomy.html
Copyright © 2011-2022 走看看