二分查找法
二分法:输入必须是一个有序的元素列表
最多需要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表示法来表示