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中getattr函数和hasattr函数作用详解
Jun 14 Python
Python编程二分法实现冒泡算法+快速排序代码示例
Jan 15 Python
对Python 网络设备巡检脚本的实例讲解
Apr 22 Python
python利用selenium进行浏览器爬虫
Apr 25 Python
Python使用MyQR制作专属动态彩色二维码功能
Jun 04 Python
Python转换时间的图文方法
Jul 01 Python
利用python实现周期财务统计可视化
Aug 25 Python
python实现简单银行管理系统
Oct 25 Python
python实现把两个二维array叠加成三维array示例
Nov 29 Python
Python实现结构体代码实例
Feb 10 Python
python实现图像拼接
Mar 05 Python
Django调用支付宝接口代码实例详解
Apr 04 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
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
2016/11/09 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
jQuery如何封装输入框插件
2016/08/19 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
vue-loader中引入模板预处理器的实现
2019/09/04 Javascript
vue实现日历表格(element-ui)
2020/09/24 Javascript
python如何查看系统网络流量的信息
2016/09/12 Python
Python使用pymysql小技巧
2017/06/04 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
set在python里的含义和用法
2019/06/24 Python
用python打印菱形的实操方法和代码
2019/06/25 Python
html5 worker 实例(一) 为什么测试不到效果
2013/06/24 HTML / CSS
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
美国巧克力喷泉品牌:Sephra
2019/05/05 全球购物
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
JAVA程序员面试题
2012/10/03 面试题
娱乐节目策划方案
2014/06/10 职场文书
董事会决议范本
2015/07/01 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python