排序算法之PHP版快速排序、冒泡排序


Posted in PHP onApril 09, 2014

一、快速排序
 
1.简介
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。
快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。
2.步骤
从数列中挑出一个元素,称为 “基准”(pivot),
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
3.代码实现

function quickSort(array $array)
 {
     $len = count($array);
     if($len <= 1)
     {
         return $array;
     }
     $key = $array[0];
     $left = array();
     $right = array();
     for($i=1; $i<$len; ++$i)
     {
         if($array[$i] < $key)
         {
             $left[] = $array[$i];
         }
         else
         {
             $right[] = $array[$i];
         }
     }
     $left = quickSort($left);
     $right = quickSort($right);
     return array_merge($left, array($key), $right);
 }
 print '<pre>';
 print_r(quickSort(array(1,4,22,5,7,6,9)));
 print '</pre>';

4.排序效果

使用快速排序法对一列数字进行排序的过程

排序算法之PHP版快速排序、冒泡排序

二、冒泡排序
 
1.简介
冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
2.步骤
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
3.代码实现

<?php
 function bubbingSort(array $array)
 {
     for($i=0, $len=count($array)-1; $i<$len; ++$i)
     {
         for($j=$len; $j>$i; --$j)
         {
             if($array[$j] < $array[$j-1])
             {
                 $temp = $array[$j];
                 $array[$j] = $array[$j-1];
                 $array[$j-1] = $temp;
             }
         }
     }
     return $array;
 }
 print '<pre>';
 print_r(bubbingSort(array(1,4,22,5,7,6,9)));
 print '</pre>';

4.排序过程

使用冒泡排序为一列数字进行排序的过程

排序算法之PHP版快速排序、冒泡排序

PHP 相关文章推荐
main.php
Dec 09 PHP
实现dedecms全站URL静态化改造的代码
Mar 29 PHP
用PHP实现读取和编写XML DOM代码
Apr 07 PHP
探讨如何把session存入数据库
Jun 07 PHP
PHP对接微信公众平台消息接口开发流程教程
Mar 25 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
Mar 17 PHP
Yii2超好用的日期和时间组件(值得收藏)
May 05 PHP
php简单实现批量上传图片的方法
May 09 PHP
php判断是否为ajax请求的方法
Nov 29 PHP
CodeIgniter框架常见用法工作总结
Mar 16 PHP
浅谈PHP中的面向对象OOP中的魔术方法
Jun 12 PHP
PHP常用header头定义代码示例汇总
Aug 29 PHP
PHP读取大文件的类SplFileObject使用介绍
Apr 09 #PHP
php解决约瑟夫环示例
Apr 09 #PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 #PHP
PHP父类调用子类方法的代码例子
Apr 09 #PHP
一个基于phpQuery的php通用采集类分享
Apr 09 #PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
Apr 08 #PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
Apr 08 #PHP
You might like
NT IIS下用ODBC连接数据库
2006/10/09 PHP
一个好用的分页函数
2006/11/16 PHP
php 输出双引号&quot;与单引号'的方法
2010/05/09 PHP
基于php伪静态的实现详细介绍
2013/04/28 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
PHP $O00OO0=urldecode &amp; eval 解密,记一次商业源码的去后门
2020/09/13 PHP
PHP7 整型处理机制修改
2021/03/09 PHP
JS 日期验证正则附asp日期格式化函数
2009/09/11 Javascript
关于COOKIE个数与大小的问题
2011/01/17 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
2011/11/21 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
JQuery Highcharts 动态生成图表的方法
2013/11/15 Javascript
javascript eval(func())使用示例
2013/12/05 Javascript
jquery实现tr元素的上下移动示例代码
2013/12/20 Javascript
js实现对table动态添加、删除和更新的方法
2015/02/10 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
遍历json 对象的属性并且动态添加属性的实现
2016/12/02 Javascript
浅谈Angular文字折叠展开组件的原理分析
2017/11/24 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
Python去除字符串两端空格的方法
2015/05/21 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
2018/12/06 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
2021/01/22 Python
药物学专业学生的自我评价
2013/10/27 职场文书
初中学习计划书范文
2014/09/15 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL