排序算法之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 相关文章推荐
实现 win2003 下 mysql 数据库每天自动备份
Dec 06 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
Jan 27 PHP
ThinkPHP使用smarty模板引擎的方法
Jul 01 PHP
访问编码后的中文URL返回404错误的解决方法
Aug 20 PHP
php生成随机颜色方法汇总
Dec 03 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
Mar 24 PHP
php数字每三位加逗号的功能函数
Oct 22 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
Dec 18 PHP
PHP+iframe图片上传实现即时刷新效果
Nov 18 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
Oct 16 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 PHP
详解Go与PHP的语法对比
May 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
用定制的PHP应用程序来获取Web服务器的状态信息
2006/10/09 PHP
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
2013/06/05 PHP
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
javascript 程序库的比较(一)之DOM功能
2010/04/07 Javascript
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
jquery交替变换颜色的三种方法 实例代码
2013/11/19 Javascript
js实现精美的银灰色竖排折叠菜单
2015/05/16 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
Immutable 在 JavaScript 中的应用
2016/05/02 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
基于bootstrap页面渲染的问题解决方法
2018/08/09 Javascript
解决Layui数据表格中checkbox位置不居中的方法
2018/08/15 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
[51:28]EG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/16 DOTA
python处理图片之PIL模块简单使用方法
2015/05/11 Python
详解Python中类的定义与使用
2017/04/11 Python
AI人工智能 Python实现人机对话
2017/11/13 Python
python使用thrift教程的方法示例
2019/03/21 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
关于Tensorflow分布式并行策略
2020/02/03 Python
台湾三立电视电商平台:电电购
2019/09/09 全球购物
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
服务员岗位职责
2015/02/03 职场文书
病房管理制度范本
2015/08/06 职场文书
学习党史心得体会2016
2016/01/23 职场文书
html form表单基础入门案例讲解
2021/07/21 HTML / CSS