冒泡排序:n:for循环次数
当n比较小时较好
//冒泡排序 function Bubble_sort($arr) { for($i=1;$i<count($arr);$i++) { // for($j=0;$j<count($arr)-$i;$j++) { //改一下大于号小于号即可从大到小或从小到大 if($arr[$j+1]<$arr[$j]) { $new = $arr[$j+1]; $arr[$j+1] = $arr[$j]; $arr[$j] = $new; } } } return $arr; }
选择排序:
当n比较小时较好
//选择排序 function select($arr) { for($i=1;$i<count($arr);$i++) { $main = $i; for($j=0;$j<count($arr);$j++) { if($arr[$main]>$arr[$j]) { list($arr[$main],$arr[$j]) = [$arr[$j],$arr[$main]]; } } } return $arr; }
快速排序:
当n比较大时较好
//快速排序 function quick($arr) { if(!is_array($arr)) return false; $len = count($arr); if($len<=1) return $arr; $left = []; $right = []; for($i=1;$i<$len;$i++) { //改一下大于号小于号即可从大到小或从小到大 if($arr[$i]<$arr[0]) { $left[] = $arr[$i]; }else { $right[] = $arr[$i]; } } $left = quick($left); $right = quick($right); return array_merge($left,[$arr[0]],$right); }
//插入排序 function insert($arr) { for($i=1;$i<count($arr);$i++) { $val = $arr[$i]; for ($j = $i - 1; $j >= 0; $j--) { if ($val < $arr[$j]) { $arr[$j+1] = $arr[$j]; $arr[$j] = $val; } else { break; } } } return $arr; } //二分查找
function dichotomy($arr,$low,$top,$num) { if($low<=$top) { $mid = ceil(($low+$top)/2); if($num < $arr[$mid]) { return dichotomy($arr,0,$mid-1,$num); }elseif($num > $arr[$mid]) { return dichotomy($arr,$mid+1,$top,$num); }else{ return $mid; } }else{ return '不存在'; } } $arr = [1,5,8,9,12,15,17,19]; echo dichotomy($arr,0,count($arr)-1,19);