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


Posted in Python onJanuary 23, 2014
/**
 * 递归法实现的快速排序
 * @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 相关文章推荐
Python类的基础入门知识
Nov 24 Python
使用cx_freeze把python打包exe示例
Jan 24 Python
python实现调用其他python脚本的方法
Oct 05 Python
用Python编写一个简单的俄罗斯方块游戏的教程
Apr 03 Python
如何用Python实现简单的Markdown转换器
Jul 16 Python
python得到一个excel的全部sheet标签值方法
Dec 10 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
Python学习笔记之集合的概念和简单使用示例
Aug 22 Python
Matplotlib scatter绘制散点图的方法实现
Jan 02 Python
Python基于stuck实现scoket文件传输
Apr 02 Python
用python绘制樱花树
Oct 09 Python
pycharm2020.1.2永久破解激活教程,实测有效
Oct 29 Python
python实现批量转换文件编码(批转换编码示例)
Jan 23 #Python
python写的一个文本编辑器
Jan 23 #Python
python生成指定长度的随机数密码
Jan 23 #Python
python使用beautifulsoup从爱奇艺网抓取视频播放
Jan 23 #Python
python3使用urllib示例取googletranslate(谷歌翻译)
Jan 23 #Python
pyside写ui界面入门示例
Jan 22 #Python
pyqt和pyside开发图形化界面
Jan 22 #Python
You might like
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
PHP7.3.10编译安装教程
2019/10/08 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
JavaScript 动态生成方法的例子
2009/07/22 Javascript
ExtJS 入门
2010/10/29 Javascript
Dom 学习总结以及实例的使用介绍
2013/04/24 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
node.js中watch机制详解
2014/11/17 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
jQuery事件对象的属性和方法详解
2017/09/09 jQuery
JS实现div模块的截图并下载功能
2017/10/17 Javascript
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
2017/11/14 jQuery
AngularJS实现自定义指令及指令配置项的方法
2017/11/20 Javascript
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
微信小程序修改swiper默认指示器样式的实例代码
2018/07/18 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
python将txt文件读取为字典的示例
2018/12/22 Python
Python在cmd上打印彩色文字实现过程详解
2019/08/07 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
英国床和浴室商场:Bed & Bath Emporium
2018/05/20 全球购物
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
院领导写的就业推荐信
2014/03/09 职场文书
推广普通话演讲稿
2014/05/23 职场文书
普通员工辞职信范文
2015/05/12 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
详细总结Python常见的安全问题
2021/05/21 Python
如何在Python中妥善使用进度条详解
2022/04/05 Python