排序算法之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 相关文章推荐
一个简单的自动发送邮件系统(三)
Oct 09 PHP
PHP 截取字符串 分别适合GB2312和UTF8编码情况
Feb 12 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
Dec 19 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
Jun 02 PHP
php获取文件夹路径内的图片以及分页显示示例
Mar 11 PHP
微信公众平台消息接口校验与消息接口响应实例
Dec 23 PHP
PHP基于yii框架实现生成ICO图标
Nov 13 PHP
php动态读取数据清除最右边距的方法
Apr 12 PHP
php cli模式下获取参数的方法
May 05 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
Jun 21 PHP
PHP PDOStatement::setFetchMode讲解
Feb 03 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 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
一个自定义位数的php多用户计数器代码
2007/03/11 PHP
php 验证码实例代码
2010/06/01 PHP
色色整理的PHP面试题集锦
2012/03/08 PHP
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
学习ExtJS form布局
2009/10/08 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
2017/09/08 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
vue中使用ueditor富文本编辑器
2018/02/08 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
Webpack的Loader和Plugin的区别
2020/11/09 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
python批量制作雷达图的实现方法
2016/07/26 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
Python 从attribute到property详解
2020/03/05 Python
Python爬虫之Selenium警告框(弹窗)处理
2020/12/04 Python
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
审计专业自荐信范文
2014/04/21 职场文书
2014年电工工作总结
2014/11/20 职场文书
学校办公室主任岗位职责
2015/04/01 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
邓小平文选读书笔记
2015/06/29 职场文书
SQL注入篇学习之盲注/宽字节注入
2022/03/03 MySQL
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers