PHP常见算法

PHP常见算法

冒泡排序

function dubbleSort($arr)
{
    $length = count($arr);
    if ($length == 1) return $arr;
    for ($i = 0; $i < $length; $i++) {
        $isOver = false
      for ($j = 0; $j < $length - $i - 1; $j++) {
          if ($arr[$j] > $arr[$j + 1]) {
              $temp = $arr[$j];
              $arr[$j] = $arr[$j + 1];
              $arr[$j + 1] = $temp;
              $isOver = true;
          }
      }
      if (!$isOver) {
          break;
      }
   }
    return $arr;
}

选择排序

function selectSort($arr)
{
   $len = count($arr);
   for($i = 0;$i<$length -1;$i++){
      $min = $i;
      for($j = $i + 1;$j<$length;$j++){
         if($arr[$j] < $arr[$i]){
              $min = $j;
         }
      }
      
      if($i != $min){
          $temp = $arr[$i];
          $arr[$i] = $arr[$min];
          $arr[$min] = $temp;
      }
   }
   return $arr;
}

快速排序

function quickSort($arr)
{
    if(count($arr) <= 1) return $arr;
    
    $mid = $arr[0];
    $left = [];
    $right = [];
    
    for($i = 1;$i<count($arr);$i++){
       if($arr[$i] > $mid){
            $right[] = $arr[$i];
       }else{
            $left[] = $arr[$i];
       }
    }
    
    $left = quickSort($left);
    $right = quickSort($right);
    
    return array_merge($left,[$mid],$right);
}

插入排序

function insertSort($arr)
{
    $length = count($arr);
    for ($i = 1; $i < $length; $i++) {
        $pos = $i;
        $key = $arr[$i];
        while ($pos > 0 && $arr[$pos - 1] > $key) {
            $arr[$pos] = $arr[$pos - 1];
            $pos = $pos - 1;
        }
        $arr[$pos] = $key;
    }
    return $arr;
}

二分查找

function search($arr, $target)
{
    return recursion(&$arr, 0, count($arr) - 1, $target);
}

function recursion($arr, $l, $r, $tarfet)
{
    $mid = intval(($l + $r) / 2);
    if ($l > $r) return -1;
    if ($target > $arr[$mid]) {
        return recursion($arr, $arr[$mid] + 1, $r, $tarfet);
    } elseif ($target < $arr[$mid]) {
        return recursion($arr, $l, $arr[$mid] - 1, $tarfet);
    } else {
        return $mid;
    }
}

字符串反转

function str_rev($str)
{
     $i = 0;
     while(1){
       if(!isset($str)){
          break;
       }
       $i++;
     }
     for($j = $i -1;$j>=0;$j--){
          $temp .= $str[$j];
     }
     return $temp;
}