冒泡排序:
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;
}