排序算法之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中的时间显示
Jan 18 PHP
PHP文件操作实现代码分享
Sep 01 PHP
php中的mongodb select常用操作代码示例
Sep 06 PHP
教你如何开启shopnc b2b2c 伪静态
Oct 21 PHP
php一维二维数组键排序方法实例总结
Nov 13 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
PHP实现动态web服务器方法
Jul 29 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
May 16 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
May 04 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 PHP
PHP实现百度人脸识别
May 06 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缓冲 output_buffering的使用详解
2013/06/13 PHP
详解PHP数组赋值方法
2015/11/07 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
解决laravel5.4下的group by报错的问题
2019/10/16 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
IE下js调试工具Companion.JS
2010/10/15 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
2013/08/01 Javascript
javascript清空table表格的方法
2015/05/14 Javascript
使用AngularJS实现表单向导的方法
2015/06/19 Javascript
简述AngularJS相关的一些编程思想
2015/06/23 Javascript
JS实现仿QQ效果的三级竖向菜单
2015/09/25 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
jQuery日程管理控件glDatePicker用法详解
2017/03/29 jQuery
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
微信小程使用swiper组件实现图片轮播切换显示功能【附源码下载】
2017/12/12 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
Vue脚手架的简单使用实例
2018/07/10 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
[02:15]2014DOTA2国际邀请赛 赛后退役选手回顾
2014/08/01 DOTA
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
Python 常用的安装Module方式汇总
2017/05/06 Python
python复制文件到指定目录的实例
2018/04/27 Python
python标识符命名规范原理解析
2020/01/10 Python
简单了解django处理跨域请求最佳解决方案
2020/03/25 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
基于canvas使用贝塞尔曲线平滑拟合折线段的方法
2018/01/10 HTML / CSS
Origins悦木之源香港官网:雅诗兰黛集团高端植物护肤品牌
2018/03/21 全球购物
火山咖啡:Volcanica Coffee
2019/10/29 全球购物
UNIX命令速查表
2012/03/10 面试题
结构工程个人自荐信范文
2013/11/30 职场文书
工商企业管理实习自我鉴定
2013/12/04 职场文书
汽车销售助理岗位职责
2015/04/14 职场文书
2015年七一建党节活动方案
2015/05/05 职场文书
法律意见书范文
2015/05/20 职场文书
Jupyter notebook 不自动弹出网页的解决方案
2021/05/21 Python