二分法查找:
/*
遞歸調用實現二分法查找
//$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);