【十三】顺序排序和二分法排序
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 ?>
结果: