美文网首页
【PHP】快速排序的「递归」和「非递归」方式

【PHP】快速排序的「递归」和「非递归」方式

作者: 马蹄哒 | 来源:发表于2020-03-13 16:41 被阅读0次
  • 递归
function quickSort1($arr)
{
    $len = count($arr);
    if ($len<2){
        return $arr;
    }

    $min = $max = $base = [];
    $base_item = $arr[0];
    for ($i=0; $i<$len; $i++){
        if ($arr[$i]<$base_item){
            $min[] = $arr[$i];
        }elseif($arr[$i]>$base_item){
            $max[] = $arr[$i];
        }else{
            $base[] = $arr[$i];
        }
    }
    $min = $this->quickSort($min);
    $max = $this->quickSort($max);
    return array_merge($max,$base,$min);
}
  • 非递归
function quickSort($arr)
{
    $borderStack[] = [0, count($arr) - 1]; //数组边界
    while (!empty($borderStack))
    {
        $border = array_pop($borderStack);
        $left = $border[0];
        $right = $border[1];
        $pivot = $arr[$left]; // 分界值
        while ($left < $right)
        {
            while ($left<$right && $arr[$right] >= $pivot) $right--;
            $arr[$left] = $arr[$right];
            while ($left<$right && $arr[$left] < $pivot) $left++;
            $arr[$right] = $arr[$left];
        }
        //$left 等于 $right :
        $arr[$left] = $pivot;
        if ($border[0] < $left - 1) $borderStack[] = [$border[0],$left-1];
        if ($border[1] > $left + 1) $borderStack[] = [$left+1, $border[1]];
    }
    return $arr;
}

相关文章

  • 【PHP】快速排序的「递归」和「非递归」方式

    递归 非递归

  • 简易快排和二分查找

    1.快排 快速排序有多种实现方式,有递归和非递归,之前遇到的解法多是递归的,而且分成了两部分代码,较难理解和使用,...

  • 三大排序算法

    归并排序[稳定的排序算法] 递归实现 非递归实现 快速排序[不稳定的排序算法] 堆排序[不稳定的排序算法]

  • PHP数组示例算法

    1、冒泡排序 2、归并排序 3、二分查找-递归 4、二分查找-非递归 5、快速排序 6、选择排序 7、插入排序

  • 反转链表(java实现)

    链表反转 节点数据结构如下: 链表反转的两种方式:递归和非递归 递归方式如下: 非递归方式如下:

  • 快速排序的递归和非递归实现

    快速排序的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,...

  • 快速排序的递归和非递归实现

    排序算法中很重要的快速排序 递归实现方式 递归实现方式的不同在于分区函数的不同 双向循环指针式,原理是利用左右指针...

  • 排序

    八大排序算法 一、归并排序 递归及非递归的JAVA实现 二、快速排序 快排算法JAVA实现 三、堆排序 堆排序堆排...

  • 二叉树-反转

    递归方式 非递归方式

  • 排序——快排/归并(nlgn)

    快速排序一般是递归实现,但是递归有一个问题就是如果递归太深会导致栈溢出,而大部分的递归实现都有对应的非递归解决方案...

网友评论

      本文标题:【PHP】快速排序的「递归」和「非递归」方式

      本文链接:https://www.haomeiwen.com/subject/wxtdshtx.html