冒泡:
<?php
$arr = array(1,4,5,22,99,88,77,1771,23);// 两两比较 冒泡排序 总的次数为 n-1
$count = count($arr);
// 控制进行比较的次数
for($i=0;$i<$count-1;$i++){// 每次比较,都比前一趟少一次for($k=0;$k<$count-1-$i;$k++){// 保存数据$a = $arr[$k];// 如果前面一项比后面大,就要进行交换if($arr[$k] > $arr[$k+1]){$arr[$k] = $arr[$k+1];$arr[$k+1]= $a;}else{// 无需交换}}
}
print_r($arr);
选择:
<?php
$arr = array(1,4,5,22,99,88,77,1771,23);$count = count($arr);for($i=0;$i<$count-1;$i++){//找最大值 从几个数中$max = $arr[0]; // 取出这些数据中的第一项 并找出最大值$max_key = 0;for($k=0;$k<$count-$i;$k++){if($arr[$k] > $max){$max = $arr[$k];$max_key = $k;}}// 交换$temp = $arr[$max_key];$arr[$max_key] = $arr[$count-$i-1];$arr[$count-$i-1] = $temp;}
print_r($arr);
二分:
<?php
$arr = array(1,4,5,22,23,44,67,88,100,211,288,78717);
$search = 288;
$i = 0;
// 就是找中间 , > 就去右边再1/2 < 就左边1/2function b_search($arr,$v,$start,$end){global $i;$i++;if($start>$end){return false;}$mid = ceil(($start + $end)/2);$mid_value = $arr[$mid]; // 中间项的值if($v == $mid_value){return $mid;}else if($v > $mid_value){$start = $mid+1;}else if($v<$mid_value){$end = $mid-1;}return b_search($arr,$v,$start,$end);}
$len = count($arr);
$result = b_search($arr,$search,0,$len-1);
var_dump($result);
echo '查找次数'.$i;