1. 程式人生 > >PHP中的四大演算法

PHP中的四大演算法


圖 | 自制

文 | 挨踢小子

——此文僅代表個人學習所得,歡迎閱覽

如有侵權,請私信刪除



氣泡排序
$arr=array(22,43,4,63,21,66,22,38,36,76,49);
function bubbleSort($arr)
{
   
$len=count($arr);
   for($i=1;$i<$len;$i++)
   {
       
for($k=0;$k<$len-$i;$k++)
       {
           
if($arr[$k]>$arr[$k+1])
           {
               
$tmp=$arr[$k+1];
               $arr[$k+1]=$arr[$k];
               $arr[$k]=$tmp;
           }
       }
   }
   
return $arr;
}




選擇排序
$arr=array(22,43,4,63,21,66,22,38,36,76,49);
  function selectSort($arr) {
   
$len=count($arr);
   for($i=0; $i<$len-1; $i++) {
       
$p = $i;
       //假定第一個是最小值的位置
       
for($j=$i+
1; $j<$len; $j++) {
           
if($arr[$p] > $arr[$j]) {
               
$p = $j;
               //判斷找出最小值的位置。
           
}
       }
       
if($p != $i) {
           
$tmp = $arr[$p];
           $arr[$p] = $arr[$i];
           $arr[$i] = $tmp;
       }
   }
   
return $arr;
}


插入排序
$arr=array(22,43,4,62,21,66,22,78,36,76,39);
function insertSort($arr) {
   
$len=count($arr);
   for($i=1; $i<$len; $i++) {
       
$tmp = $arr[$i];
       for($j=$i-1;$j>=0;$j--) {
           
if($tmp < $arr[$j]) {
               
$arr[$j+1] = $arr[$j];
               $arr[$j] = $tmp;
           } else {
               
break;
           }
       }
   }
   
return $arr;
}


快速排序
$arr=array(22,43,4,63,21,66,22,38,36,76,49);
function quickSort($arr)
{
   
//判斷陣列是否適合排序
   
$length = count($arr);
   if ($length <= 1) {
       
return $arr;
   }
   
//選擇第一個元素作為基準
   
$base_num = $arr[0];
   //遍歷除了標尺外的所有元素,
    //按照大小關係放入兩個陣列內
  //初始化兩個陣列
   
$left_array = array();  
   //小於基準的
   
$right_array = array();  
   //大於基準的
   
for ($i = 1; $i < $length; $i++) {
       
if ($base_num > $arr[$i]) {
           
//放入左邊陣列
           
$left_array[] = $arr[$i];
       } else {
           
//放入右邊陣列
           
$right_array[] = $arr[$i];
       }
   }
   
//再分別對左邊和右邊的陣列進行相同的
  //序處理方式遞迴呼叫這個函式
   
$left_array =  quickSort($left_array);
   $right_array =  quickSort($right_array);
  //然後合併陣列

return array_merge($left_array,array($base_num),$right_array);
}



●作者簡介:挨踢小子,現在就讀於某某大學,一個一無所有,努力拼搏不負青春的小子,喜歡文字,愛好讀書。公眾號:  挨踢小子(LN-aitixiaozi )。