zoukankan      html  css  js  c++  java
  • 二分法查找数组是否包含某一元素

    二分法查找数组是否包含某一元素,兼容正反序,代码实现:

     1 <?php
     2 
     3 $searchValue = (int)$_GET['key'];
     4 
     5 function search(array $array, $value)
     6 {
     7     $max = count($array)-1;
     8     $min = 0;
     9     $isAscSort = $array[$min] < $array[$max];
    10 
    11     while (TRUE) {
    12         $sum = $min+$max;
    13         $midKey = (int)($sum%2 == 1 ? ceil($sum/2) : $sum/2);
    14 
    15         if ($max < $min) {
    16             return -1;
    17         } else if ($value == $array[$midKey]) {
    18             return 1;
    19         } else if ($value > $array[$midKey]) {
    20             $isAscSort ? $min = $midKey+1 : $max = $midKey-1;
    21         } else if ($value < $array[$midKey]) {
    22             $isAscSort ? $max = $midKey-1 : $min = $midKey+1;
    23         }
    24     }
    25 }
    26 
    27 $array = array(
    28     '4', '5', '7', '8', '9', '10', '11', '12'
    29 );
    30 // 正序
    31 echo search($array, $searchValue);
    32 
    33 // 逆序
    34 rsort($array);
    35 echo search($array, $searchValue);

    这个之前搜过,看过百度百科的例子(Java的实现),还有一些其他技术宅写的Code,都有问题,根本就没实现,这些人不测试就放出来误导人,大家可以去搜搜看下,昨天闲来无事就自己写一个分享给大家。

    这个没考虑非顺序键的数组,主要是方法,如果需要大家可以自己扩展下。

  • 相关阅读:
    expect 函数体 花括号
    bash 连接字符串
    Ubuntu下搭建Python开发环境
    expect
    >&2
    expect语法基础: while、for 循环、if 语句的用法示例
    bash exit
    python开发工具
    eclipse中安装adt出现了duplicate location错误怎样解决
    shell source
  • 原文地址:https://www.cnblogs.com/toby/p/3094342.html
Copyright © 2011-2022 走看看