【十三】顺序排序和二分法排序

 1 <?php
 2 //顺序查找
 3     $a=array(1,6,3,2,2,5,3);
 4     function search($a,$findval){
 5         $flag=false;
 6         for($i=0;$i<count($a);$i++) {
 7             if ($a[$i]==$findval) {
 8                 echo "找到了,下标为".$i;
 9                 $flag=true;
10                 break;
11             }            
12         }
13         if (!$flag) {
14             echo "查询不到";
15         }
16     }
17     search($a,300);
18 //二分查找法 前提是必须是有序数组
19 //思路:
20 //1.用中间数与findval对比
21 //2.如果要查找的数比中间数小,则在左边查找
22 //3.反之,在右边查找
23 //4.不大于或小于左边,则刚好是中间数
24     function binarysearch($arr,$findval,$leftindex,$rightindex){
25         if($leftindex>$rightindex){
26             echo "找不到该数";
27             return;
28         }
29         $middleindex=round(($leftindex+$rightindex)/2);
30         if ($findval<$arr[$middleindex]) {
31             binarysearch($arr,$findval,$leftindex,$middleindex-1);
32         }else if ($findval>$arr[$middleindex]) {
33             binarysearch($arr,$findval,$middleindex+1,$rightindex);
34         }else{
35             echo "找到了这个数 下标为$middleindex";
36         }
37     }
38     $arr1=array(6,44,66,69,77,99);
39     // $arr=array(1,23,53,412);
40     binarysearch($arr1,99,0,count($arr1)-1);
41 ?>

结果:

原文地址:https://www.cnblogs.com/8013-cmf/p/7820997.html