PHP冒泡排序
$a=array('3','8','1','4','11','7');print_r($a);$len = count($a);//从小到大for($i=1;$i<$len;$i++) { for ($j = $len - 1; $j >= $i; $j--) { if ($a[$j] < $a[$j - 1]) {//如果是从大到小的话,只要在这里的判断改成if($b[$j]>$b[$j-1])就可以了 $x = $a[$j]; $a[$j] = $a[$j - 1]; $a[$j - 1] = $x; } }}print_r($a);exit;
$i=1,子循环运行$j=5,$j=4,$j=3,$j=2,$=1;第一次查找将这个数组中最小的放到第一位去
$=2,资讯还运行$j=5,$j=4;$j=3;$j=2;第二次查找这个数组中次小的放到第二去
如此循环就实现了排列,这就是冒泡排序
php二分算法
二分算法是为了实现查找某个元素在一个数组中的索引值,将数组一分为2,逐步缩小范围,最终查找到,前提是数组必须排列好。
public function search($arr,$searchval){ $top=count($arr)-1; $low=0; while($low<=$top){ $mid=floor(($top+$low)/2);//取整进一 if($arr[$mid]==$searchval){ return $mid; } elseif($arr[$mid]>$searchval){ //如果说中间的值比搜索的值大,证明我们要到前半部分去搜索,因此top为中间的-1 $top=$mid-1; } else{ //如果说中间的值比搜索的值小,证明我们要到后半部分去搜索,因此low为中间的+1 $low=$mid+1; } } return -1;//未查找到}
$arr=array(1,2,3,5,9,41,50);var_dump($this->search($arr,41));exit;