排序算法之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 开发环境配置(Zend Studio)
Apr 28 PHP
php学习笔记 面向对象的构造与析构方法
Jun 13 PHP
无JS,完全php面向过程数据分页实现代码
Aug 27 PHP
php设计模式小结
Feb 15 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
Nov 09 PHP
php常用字符函数实例小结
Dec 29 PHP
PHP常用的三种设计模式
Feb 17 PHP
php 浮点数比较方法详解
May 05 PHP
php-fpm开启状态统计的方法详解
Jun 23 PHP
thinkphp分页集成实例
Jul 24 PHP
php 删除指定文件夹的实例讲解
Jul 25 PHP
Laravel基础-关于引入公共文件的两种方式
Oct 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实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
2014/05/04 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
详解XMLHttpRequest(一)同步请求和异步请求
2016/09/14 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
Nodejs基于LRU算法实现的缓存处理操作示例
2017/03/17 NodeJs
node.js操作mongodb简单示例分享
2017/05/25 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
ES6学习教程之块级作用域详解
2017/10/09 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
vue 实现剪裁图片并上传服务器功能
2018/03/01 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
实例讲解python函数式编程
2014/06/09 Python
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
对tensorflow中cifar-10文档的Read操作详解
2020/02/10 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
Python发送邮件封装实现过程详解
2020/05/09 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
Bjorn Borg官方网上商店:国际运动时尚品牌
2016/08/27 全球购物
香港交友网站:be2香港
2018/07/22 全球购物
优秀员工自荐书范文
2013/12/08 职场文书
护理工作感言
2014/01/16 职场文书
会计岗位描述
2014/02/22 职场文书
一年级小学生评语
2014/04/22 职场文书
委托证明模板
2014/09/16 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
Pandas搭配lambda组合使用详解
2022/01/22 Python
Go web入门Go pongo2模板引擎
2022/05/20 Golang