冒泡排序:
function buttle_sort($array) { $len=count($array); if($len<2){ return $array; } for($i=0;$i<$len;$i++){ $flag = false;//本趟排序開始前,交換標志應為假 for($j=$len-1;$j>$i;$j--){ if($array[$j]<$array[$j-1]){ $tmp = $array[$j]; $array[$j] = $array[$j-1]; $array[$j-1] = $tmp; $flag = true;//發生了交換,故將交換標志置為真 } } } if(!$flag)//本趟排序未發生交換,提前終止算法 return $array; }
選擇排序
<?php //選擇排序 function selectSort($arr) { $count = count($arr); if ($count < 2) { return $arr; } for ($i = 0; $i < $count; $i ++) { $min = $i; for($j=$i + 1;$j < $count;$j++){ if ($arr[$min] > $arr[$j]) { $min = $j; // 找到最小的那個元素的下標 } } if ($min != $i) { // 如果下標不是$i 則互換。 $tmp = $arr[$i]; $arr[$i] = $arr[$min]; $arr[$min] = $tmp; } } return $arr; }
冒泡排序其實上是和選擇排序相比,並無明顯差別。都是找到最小的,放到最左端。依次循環解決問題。差別在於冒泡排序的交換位置的次數較多,而選擇排序則是找到最小的元素的下標,然後直接和最左端的交換位置。
快速排序算法:
//快速排序 function quickSort(&$arr){ if(count($arr)>1){ $k=$arr[0]; $x=array(); $y=array(); $_size=count($arr); for($i=1;$i<$_size;$i++){ if($arr[$i]<=$k){ $x[]=$arr[$i]; }elseif($arr[$i]>$k){ $y[]=$arr[$i]; } } $x=quickSort($x); $y=quickSort($y); return array_merge($x,array($k),$y); }else{ return$arr; } }
二分查找
/**二分查找:查找一個值在數組中的位置 * @$arr:操作的數組,前提是按順序排列 * @$val:查找的值 * @$low:查找的起始位置,默認從數組的第一個數找起 * @hight:查找的結束位置**/ function binarySearch($arr, $val, $hight, $low=0){ while($low <= $hight){ $mid = ceil($low + ($hight - $low) / 2); if($arr[$mid] == $val){ return $mid; }elseif($arr[$mid] > $val){ $hight = $mid -1; }else{ $low = $mid +1; } } return -1; }