二分查找法

二分法:输入必须是一个有序的元素列表

最多需要log2^n步(对数):将2^n=x(假如列表包含8个元素,2^n=8 n=3,最多需要3步可以找到该元素)

练习:

1.假设有一个包含128个名字的有序列表,你要使用二分查找在其中查找一个名字,请 问最多需要几步才能找到?(7步 2^7=128)

2.上面列表的长度翻倍后,最多需要几步?(8步)

代码 :

<?php
//前提条件:必须是一个有序列表
//解题思路:
//1 将数组排序
//2 寻找中间数。中间数=(开始数+结尾数)/2
//3 判断中间数。如果中间数比查找数小,就在中间数和结尾数中查找。反之在开始数和中间数中查找
//4 多次循环,找出查找数的下标
$a = [4,3,3,2,1,1234,3,4,5,6,7,7,8,4,21,3243,54,5,2,32,2,32,3,2,32,32,3,2,14254,5,99,43,65,6,653,65,4];
//$a =[4,3,1,2];
sort($a);
$guess = 324322;

$len = count($a);
$start = 0;
$end = $len -1;

while($len >= $end){
   $mid = intval(($start + $end)/2);
    if ($guess == $a[$mid]){
        echo $mid;exit;
    }
    if ($guess > $a[$mid]) {
        $start= $mid;
    }else{
        $end = $mid;
    }
}

大O表示法:指出最糟情况下的运行时间

 

算法的时间指的是操作数的增速

算法的运行时间是以大O表示法来表示 

 

posted @ 2020-03-05 11:53  花花妹子。  阅读(606)  评论(0编辑  收藏  举报