標籤:有序 基本 middle style ddl shu 儲存 尋找 條件
關於PHP中的基礎演算法,小結一下,也算是本部落格的第一篇文章
1.2種排序演算法
冒泡排序:
例子:個人見解
5 6 2 3 7 9第一趟5 6 2 3 7 95 2 6 3 7 95 2 3 6 7 95 2 3 6 7 95 2 3 6 7 9第二趟2 5 3 6 7 92 3 5 6 7 92 3 5 6 7 92 3 5 6 7 9第三趟2 3 5 6 7 92 3 5 6 7 92 3 5 6 7 9第四趟2 3 5 6 7 92 3 5 6 7 9第五趟 2 3 5 6 7 9
兩兩比較,每一趟中都會確定出最大的數然後放在右邊,冒泡速度較慢,但是比較穩定。
代碼方面主要是嵌套的for迴圈
代碼:
1 #冒泡排序 2 #原理兩兩比較,大的放右邊,每次迴圈會排出一個最大的放在右邊 3 function maopao($arr){ 4 $len=count($arr); 5 for ($i=0; $i < $len-1; $i++) { 6 for ($a=0; $a <$len-1-$i ; $a++) { 7 if ($arr[$a]>$arr[$a+1]) { 8 $t=$arr[$a]; 9 $arr[$a]=$arr[$a+1];10 $arr[$a+1]=$t;11 }12 }13 }14 return $arr;15 16 }17 $arr=[5,6,8,1,2,3,7,55,69,23,11];18 var_dump(maopao($arr));
選擇排序:
例子:個人見解
#選擇排序8 5 6 2 4 7第一趟5 8 6 2 4 75 8 6 2 4 72 8 6 5 4 72 8 6 5 4 72 8 6 5 4 7第二趟2 6 8 5 4 72 5 8 6 4 72 4 8 6 5 72 4 8 6 5 7第三趟2 4 6 8 5 72 4 5 8 6 72 4 5 8 6 7第四趟2 4 5 6 8 72 4 5 6 8 7第五趟2 4 5 6 7 8
假設數組中靠左的元素是小的,然後跟右邊的元素比較,如果左邊的大於右邊的就換到左邊,每趟都能確定出一個最小值,缺點在於不穩定性,速度快於冒泡排序。
代碼:
1 #選擇排序 2 #那最左邊的和右邊比較如果大於就換到右邊,每趟確定出一個最小值 3 function xuanze($arr){ 4 $len=count($arr); 5 for ($i=0; $i <$len-1 ; $i++) { 6 //假設當前最左邊的元素是最小值,儲存下標 7 $key=$i; 8 for ($j=$i+1; $j < $len; $j++) { 9 //如果左邊的大於右邊的就儲存下標10 if($arr[$key]>$arr[$j]){11 $key=$j;12 }13 }14 //找到最小的值,交換下標15 $temp=$arr[$key];16 $arr[$key]=$arr[$i];17 $arr[$i]=$temp;18 }19 return $arr;20 }21 $arr=[11,2,3,55,66,99];22 var_dump(xuanze($arr));
關於排序先寫兩個,日後跟新~~
1.2種尋找演算法
順序尋找:
這個比較簡單,原理就是從第一個開始比較直到找到,效率比較低,較穩定。
代碼:
#選擇排序#存在值返回該值的下標,不存在返回falsefunction shunxu($arr,$target){ $len=count($arr); for ($i=0; $i <$len ; $i++) { if ($arr[$i]==$target) { return $i; } } return false;}$arr=[2,5,6,3,8,52,6];var_dump(shunxu($arr,52));
二分法尋找
條件嚴格,數組必須有序排列,效率較高。
原理:取一個中間值進行和要尋找的值比較,假如數組升序排序,值大於要尋找的值,然後下標減一
#二分法尋找#選擇升序數組function erfen($arr,$target){ $len=count($arr)-1; $middle=ceil($len/2); if ($arr[$middle]==$target) { return true; }elseif($arr[$middle]>$target){ for ($i=0; $i <$middle ; $i++) { if ($arr[$i]==$target) { return true; } } }else{ //因為迴圈的是長度所以得+1 for ($i=$middle; $i < $len+1 ; $i++) { if ($arr[$i]==$target) { return true; } } } return false;}$arr=[1,2,3,4,5,6,7,10,11];var_dump(erfen($arr,11));
先寫這幾個吧,日後在更!
PHP數組基本排序演算法和尋找演算法