PHP二分法查詢、快速排序、氣泡排序
阿新 • • 發佈:2018-12-14
二分法查詢:
/* 遞迴呼叫實現二分法查詢 //$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);