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中变量交换的例子
Aug 25 Python
Python实现获取网站PR及百度权重
Jan 21 Python
python机器学习实战之树回归详解
Dec 20 Python
python 集合 并集、交集 Series list set 转换的实例
May 29 Python
Python基于最小二乘法实现曲线拟合示例
Jun 14 Python
python将控制台输出保存至文件的方法
Jan 07 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
python+selenium select下拉选择框定位处理方法
Aug 24 Python
python pygame实现挡板弹球游戏
Nov 25 Python
Python图像处理库PIL的ImageFilter模块使用介绍
Feb 26 Python
利用django model save方法对未更改的字段依然进行了保存
Mar 28 Python
Python使用eval函数执行动态标表达式过程详解
Oct 17 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
PHP三层结构(上) 简单三层结构
2010/07/04 PHP
PHP session会话的安全性分析
2011/09/08 PHP
PHP中数组的三种排序方法分享
2012/05/07 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
2014/01/09 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
thinkPHP分页功能实例详解
2017/05/05 PHP
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
ExtJs整合Echarts的示例代码
2018/02/27 Javascript
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
js实现select下拉框选择
2020/01/11 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
使用Python构建Hopfield网络的教程
2015/04/14 Python
Python实现识别手写数字大纲
2018/01/29 Python
利用python如何处理nc数据详解
2018/05/23 Python
python xpath获取页面注释的方法
2019/01/14 Python
Python爬虫之urllib基础用法教程
2019/10/12 Python
python使用布隆过滤器的实现示例
2020/08/20 Python
Java面向对象面试题
2016/12/26 面试题
迟到检讨书大全
2014/01/25 职场文书
导游个人求职信
2014/04/25 职场文书
银行员工考核评语
2014/12/31 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
职称评定个人总结
2015/03/05 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
忆童年!用Python实现愤怒的小鸟游戏
2021/06/07 Python
微信小程序 根据不同用户切换不同TabBar
2022/04/21 Javascript