好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PHP实现几个排序和查找算法

冒泡排序,快速排序,二分查找,虽然简单,但是一段时间不用的话就很容易忘记,这里是小编找来的用PHP实现代码,分享给大家一起来学习一下。

排序

冒泡排序

每一次冒出一个最大的值

function bubbleSort($arr)
{
    $count = count($arr);
    if ($count == 0) return false;

    for ($i = 0; $i < $count - 1; $i++) {
   for ($k = 0; $k < $count - 1 - $i; $k++) {
  if ($arr[$k] < $arr[$k + 1]) {
 $tmp    = $arr[$k];
 $arr[$k]= $arr[$k + 1];
 $arr[$k + 1] = $tmp;
  }
   }
    }

    return $arr;
}

快速排序

选择一个值作为基准,比他小的放在左边,比他大的放在右边,然后对左右递归,最后合并

function quickSort($arr)
{
    $count = count($arr);
    if ($count <= 1) return $arr;

    $base = $arr[0];
    $left = $right = [];
    for ($i = 1; $i < $count; $i++) {
   if ($arr[$i] < $base) {
  $left[] = $arr[$i];
   } else {
  $right[] = $arr[$i];
   }
    }

    $left  = quickSort($left);
    $right = quickSort($right);

    return array_merge($left, [$base], $right);
}

选择排序

选择一个值假设为最小,然后依次比较,发现比他小的就互换位置

function selectSort($arr)
{
    $count = count($arr);
    if ($count <= 1) return $arr;

    for ($i = 0; $i < $count; $i++) {
   //假设最小值位置
   $p = $i;
   //用假设的最小值$arr[$p]轮流比较,发现比他小的就互换
   for ($j = $i + 1; $j < $count; $j++) {
  if ($arr[$p] > $arr[$j]) {
 $p = $j;
  }
   }

   if ($p != $i) {
  $tmp= $arr[$p];
  $arr[$p] = $arr[$i];
  $arr[$i] = $tmp;
   }
    }

    return $arr;
}

查找

二分查找

二分查找必须是一个排序好的数组,每次拿数组中间位置的值与目标进行比较

function binarySearch(array $arr, $target)
{
    $low = 0;
    $high = count($arr) - 1;
    while ($low <= $high) {
   $middle = floor(($high + $low) / 2);
   if ( $arr[$middle] == $target ) {
  return $middle;
   } elseif ( $arr[$middle] < $target ) {
  $low = $middle + 1;
   } else {
  $high = $middle - 1;
   }
    }

    return false;
}

推荐教程:PHP视频教程

以上就是PHP实现几个排序和查找算法的详细内容,更多请关注Gxl网其它相关文章!

查看更多关于PHP实现几个排序和查找算法的详细内容...

  阅读:46次