二分法查找:
/*
递归调用实现二分法查找
//$search 函数 $array为数组,$K为要找的值,$low为查找范围的最小键值,$high为查找范围的最大键值
//intval返回整数值*/
function search($array,$k,$low=0,$high=0){
//判断数组元素的数量
if(count($array)!=0 and $high==0){ //判断是否为第一次调用
//数组的元素个数
$high = count($array);
}
if($low <= $high){ //如果还存在剩余的数组元素
$mid = intval(($low+$high)/2); //取$low 与$high的中间值
//return $array[$mid];
if($array[$mid] == $k){
return $mid; //如果找到则返回
}elseif($k < $array[$mid]){
//如果上面没有找到,则继续查找
return search($array,$k,$low,$mid-1);
}else{
return search($array,$k,$mid+1,$high);
}
}
return "没有要查找的值";
}
$array = array(3,4,5,7,8,9,10);
echo search($array,4);
快速排序:
<?php
$a = array(2,13,42,34,56,23,67,365,87665,54,68,3);
function quick_sort($a)
{
// 判断是否需要运行,因下面已拿出一个中间值,这里<=1
if (count($a) <= 1) {
return $a;
}
$middle = $a[0]; // 中间值
$left = array(); // 接收小于中间值
$right = array();// 接收大于中间值
// 循环比较
for ($i=1; $i < count($a); $i++) {
if ($middle < $a[$i]) {
// 大于中间值
$right[] = $a[$i];
} else {
// 小于中间值
$left[] = $a[$i];
}
}
// 递归排序划分好的2边
$left = quick_sort($left);
$right = quick_sort($right);
// 合并排序后的数据,别忘了合并中间值
return array_merge($left, array($middle), $right);
}
print_r(quick_sort($a));
冒泡:
<?php
function order($arr){
$count = count($arr);
$temp = 0;
//外层控制排序轮次
for($i=0; $i<$count-1; $i++){
//内层控制每轮比较次数
for($j=0; $j< $count-1-$i; $j++){
if($arr[$j] > $arr[$j+1]){
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp;
}
}
}
return $arr;
}
$arr= array(6,3,8,2,9,1);
$res = order($arr);
var_dump($res);