php使用递归与迭代实现快速排序示例

 更新时间:2014年01月23日 10:01:42   作者:  
这篇文章主要介绍了php使用递归与迭代实现快速排序的示例,大家参考使用吧

复制代码 代码如下:

/**
 * 递归法实现的快速排序
 * @param $seq
 * @return array
 */
function quicksort($seq)
{
    if (count($seq) > 1) {
        $k = $seq[0];
        $x = array();
        $y = array();
        $_size = count($seq); //do not use count($seq) in loop for.
        for ($i = 1; $i < $_size; $i++) {
            if ($seq[$i] <= $k) {
                $x[] = $seq[$i];
            } else {
                $y[] = $seq[$i];
            }
        }
        $x = quicksort($x);
        $y = quicksort($y);
        return array_merge($x, array($k), $y);
    } else {
        return $seq;
    }
}

/**用迭代实现
 * @param $seq
 * @return array
 */
function quicksortX(&$seq)
{
    $stack = array($seq);
    $sort = array();
    while ($stack) {
        $arr = array_pop($stack);
        if(count($arr) <= 1){
            if (count($arr) == 1) {
                $sort[] = &$arr[0];
            }
            continue;
        }

        $k = $arr[0];
        $x = array();
        $y = array();
        $_size = count($arr);
        for ($i = 1; $i < $_size; $i++) {
            if ($arr[$i] <= $k) {
                $x[] = &$arr[$i];
            } else {
                $y[] = &$arr[$i];
            }
        }
        !empty($y) && array_push($stack, $y);
        array_push($stack, array($arr[0]));
        !empty($x) && array_push($stack, $x);
    }
    return $sort;
}
//$testArr = array(5545, 5, 6, 7675, 100, 9, 233, 566, 789, 456, 23, 55, 7, 4, 343, 564, 5, 45657, 8, 998, 9, 34, 34, 55, 6, 5, 6433, 67, 6, 6766, 4, 2, 42, 25634, 34343, 3, 3, 454, 4, 65, 6678, 57, 5455);
for($i=0;$i<20;$i++){
    $testArr[]=mt_rand(0,10000);
}
//var_dump($testArr);
echo count($testArr).'<br>';
$start=microtime();
echo count(quicksort($testArr)).'<br>';
echo microtime()-$start.'<br>';
var_dump(quicksort($testArr));
echo '------------------------------------------------------------------------<br>';
echo count($testArr).'<br>';
$start=microtime();
echo count(quicksortX($testArr)).'<br>';
echo microtime()-$start.'<br>';
var_dump(quicksortX($testArr));

相关文章

  • python pyaudio音频录制的实现

    python pyaudio音频录制的实现

    这篇文章主要介绍了python pyaudio音频录制的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • python查看某个包的当前安装版本及最新版本的五种方法

    python查看某个包的当前安装版本及最新版本的五种方法

    这篇文章主要介绍了5种查看Python包最新版本的方法,包括使用pip的--outdated参数、pipsearch命令(已被弃用)、pipindexversions命令、pypi-simple工具和在Python脚本中使用pip,需要的朋友可以参考下
    2025-01-01
  • Python抓包并解析json爬虫的完整实例代码

    Python抓包并解析json爬虫的完整实例代码

    这篇文章主要给大家介绍了关于Python抓包并解析json爬虫的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • python线性插值解析

    python线性插值解析

    这篇文章主要介绍了python线性插值解析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Python全栈之推导式和生成器

    Python全栈之推导式和生成器

    这篇文章主要为大家介绍了Python推导式和生成器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • python中的flask框架Jinja 模板入门教程

    python中的flask框架Jinja 模板入门教程

    这篇文章主要介绍了 python中的flask框架Jinja 模板入门,Jinja 模板其实是 html 文件,一般情况下放在 Flask 工程的 /templates 目录下,对python flask Jinja 模板相关知识感兴趣的朋友一起看看吧
    2022-04-04
  • pandas 使用merge实现百倍加速的操作

    pandas 使用merge实现百倍加速的操作

    这篇文章主要介绍了pandas 使用merge实现百倍加速的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Python对CSV、Excel、txt、dat文件的处理

    Python对CSV、Excel、txt、dat文件的处理

    本文介绍的是Python对CSV、Excel、txt、dat文件的处理,具有一定的参考价值,需要的朋友跟随小编一起来看下
    2018-09-09
  • python3中确保枚举值代码分析

    python3中确保枚举值代码分析

    在本篇文章里小编给大家整理的是一篇关于python3中确保枚举值代码分析内容,有兴趣的朋友们可以学习下。
    2020-12-12
  • Python如何将装饰器定义为类

    Python如何将装饰器定义为类

    这篇文章主要介绍了Python如何将装饰器定义为类,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07

最新评论