首页 > 编程语言 > 详细

快速排序

时间:2021-04-22 23:59:13      阅读:47      评论:0      收藏:0      [点我收藏+]

代码及说明

<?php
//注意这里的参数 $arr 使用的地址传递
function quickSort(&$arr, $low, $high)
{
    //当起始位置不小于终止位置时停止递归
    if ($low > $high) {
        return;
    }

    $first = $low;
    $last = $high;
    //设置枢轴
    $key = $arr[$first];

    //遍历交换
    while ($first < $last) {
        //从后边往前移动终止位置
        while ($first < $last && $arr[$last] >= $key) {
            --$last;
        }

        //当终止位置移动到起始位置或者移动到的位置的数据比枢轴位置的数据小时,将移动到的位置的数据交换到枢轴位置
        $arr[$first] = $arr[$last];

        //然后从前往后移动起始位置
        while ($first < $last && $arr[$first] <= $key) {
            ++$first;
        }
        //当起始位置移动到当前的终止位置或移动到的位置的数据比枢轴数据大时,将移动到的位置的数据交换到当前的终止位置
        $arr[$last] = $arr[$first];
    }
    //将原枢轴位置的值放到移动后的起始位置
    $arr[$first] = $key;
    //继续排序当前起始位置左边的数据
    quickSort($arr, $low, $first - 1);
    //继续排序当前起始位置右边的数据
    quickSort($arr, $first + 1, $high);
}

$arr = [54, 32, 34, 87, 45, 65, 43];
foreach ($arr as $value) {
    echo $value . "\t";
}
echo "\n";
quickSort($arr, 0, count($arr) - 1);
foreach ($arr as $value) {
    echo $value . "\t";
}

性能

最佳情况: T(n) =O(nlog2n) 。
最差情况: T(n) =O(n2) 。
平均情况: T(n) =O(nlogn) 。

快速排序

原文:https://www.cnblogs.com/FirstLine/p/14691213.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!