首页主机资讯php快速排序的非递归实现怎样

php快速排序的非递归实现怎样

时间2025-09-27 20:13:03发布访客分类主机资讯浏览1146
导读:在PHP中,快速排序的非递归实现可以通过使用栈来模拟递归过程。以下是一个非递归实现的快速排序算法示例: function quickSortNonRecursive($arr { $stack = []; $stack[]...

在PHP中,快速排序的非递归实现可以通过使用栈来模拟递归过程。以下是一个非递归实现的快速排序算法示例:

function quickSortNonRecursive($arr) {
    
    $stack = [];
    
    $stack[] = [0, count($arr) - 1];


    while (!empty($stack)) {
    
        list($low, $high) = array_pop($stack);
    

        if ($low <
 $high) {
    
            $pivotIndex = partition($arr, $low, $high);
    

            $stack[] = [$low, $pivotIndex - 1];
    
            $stack[] = [$pivotIndex + 1, $high];

        }

    }
    

    return $arr;

}
    

function partition(&
$arr, $low, $high) {
    
    $pivot = $arr[$high];
    
    $i = $low - 1;
    

    for ($j = $low;
     $j <
     $high;
 $j++) {
    
        if ($arr[$j] <
= $pivot) {
    
            $i++;
    
            list($arr[$i], $arr[$j]) = array($arr[$j], $arr[$i]);

        }

    }
    

    list($arr[$i + 1], $arr[$high]) = array($arr[$high], $arr[$i + 1]);
    
    return $i + 1;

}
    

// 测试
$arr = [3, 6, 8, 10, 1, 2, 1];
    
print_r(quickSortNonRecursive($arr));
    

在这个示例中,我们首先定义了一个quickSortNonRecursive函数,它接受一个数组作为参数。我们使用一个栈来存储待处理的子数组的边界,初始时将整个数组的边界(0和数组长度减1)压入栈中。

然后,我们使用一个while循环来处理栈中的元素。在每次迭代中,我们从栈中弹出一个子数组的边界,然后调用partition函数对这个子数组进行分区。分区完成后,我们将新的子数组的边界压入栈中。这个过程会一直持续到栈为空,也就是所有的子数组都已经处理完毕。

partition函数负责将数组分为两部分,一部分的元素都小于等于枢轴元素,另一部分的元素都大于枢轴元素。我们使用两个指针$i$j来遍历数组,当$arr[$j]小于等于枢轴元素时,我们交换$arr[$i]$arr[$j]的值,并将$i加1。最后,我们将枢轴元素放到正确的位置,并返回其索引。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: php快速排序的非递归实现怎样
本文地址: https://pptw.com/jishu/710419.html
android viewholder怎样提高加载速度 android viewholder与其他优化方法对比

游客 回复需填写必要信息