PHP二分法查找、快速排序、冒泡排序

二分法查找:

/*
    遞歸調用實現二分法查找
//$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);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章