排序算法之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在线代理转向代码
May 05 PHP
PHP转换文件夹下所有文件编码的实现代码
Jun 06 PHP
解析link_mysql的php版
Jun 30 PHP
Php中使用Select 查询语句的实例
Feb 19 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
Sep 10 PHP
php实现的Cookies操作类实例
Sep 24 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
Feb 26 PHP
Symfony核心类概述
Mar 17 PHP
PHP模板引擎Smarty中变量的使用方法示例
Apr 11 PHP
PHP将身份证正反面两张照片合成一张图片的代码
Apr 08 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 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
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
php禁用函数设置及查看方法详解
2016/07/25 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
Some tips of wmi scripting in jscript (1)
2007/04/03 Javascript
jquery 事件冒泡的介绍以及如何阻止事件冒泡
2012/12/25 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
2016/12/29 Javascript
vue图片加载与显示默认图片实例代码
2017/03/16 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
Vue 3.0双向绑定原理的实现方法
2019/10/23 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
[51:06]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第二场 1月26日
2021/03/11 DOTA
python3.x上post发送json数据
2018/03/04 Python
python实现爬取图书封面
2018/07/05 Python
Python 编程速成(推荐)
2019/04/15 Python
Python中zip函数如何使用
2020/06/04 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
详解scrapy内置中间件的顺序
2020/09/28 Python
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
食品业务员岗位职责
2014/03/18 职场文书
弘扬雷锋精神演讲稿
2014/05/10 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
上学路上观后感
2015/06/16 职场文书
入队仪式主持词
2015/07/04 职场文书
电工生产实习心得体会
2016/01/22 职场文书
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
2022/01/22 MySQL