排序算法之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 相关文章推荐
php抓取https的内容的代码
Apr 06 PHP
一个简单php扩展介绍与开发教程
Aug 19 PHP
smarty巧妙处理iframe中内容页的代码
Mar 07 PHP
解析PHP中的unset究竟会不会释放内存
Jul 18 PHP
在PHP中使用X-SendFile头让文件下载更快
Jun 01 PHP
CodeIgniter框架URL路由总结
Sep 03 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
Sep 22 PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
php 可变函数使用小结
Jun 12 PHP
PHP实现的AES双向加密解密功能示例【128位】
Sep 03 PHP
简单实用的PHP文本缓存类实例
Mar 22 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下intval()和(int)转换使用与区别
2008/07/18 PHP
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
js 中 document.createEvent的用法
2010/08/29 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
JavaScript中的Repaint和Reflow用法详解
2015/07/27 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
AngularJS过滤器filter用法总结
2016/12/13 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
node.js基础知识小结
2018/02/26 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
如何搜索查找并解决Django相关的问题
2014/06/30 Python
Python三元运算实现方法
2015/01/12 Python
Python基础教程之正则表达式基本语法以及re模块
2016/03/25 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
享誉全球的多元化时尚精品购物平台:Farfetch发发奇(支持中文)
2017/08/08 全球购物
劳资员岗位职责
2013/11/11 职场文书
计算机应用专业推荐信
2013/11/13 职场文书
迟到检讨书500字
2014/02/05 职场文书
毕业生欢送会主持词
2014/03/31 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
乡镇党建工作汇报材料
2014/08/14 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
模范教师事迹材料
2014/12/16 职场文书
开票证明
2015/06/23 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
四群教育工作总结
2015/08/10 职场文书