排序算法之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 将excel导入mysql
Nov 09 PHP
PHP 采集程序原理分析篇
Mar 05 PHP
PHP源码分析之变量的存储过程分解
Jul 03 PHP
php防止伪造数据从地址栏URL提交的方法
Aug 24 PHP
8个PHP程序员常用的功能汇总
Dec 18 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
Apr 01 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
PHP中递归的实现实例详解
Nov 14 PHP
php strftime函数的详细用法
Jun 21 PHP
PHP get_html_translation_table()函数用法讲解
Feb 16 PHP
php和html的区别点详细总结
Sep 24 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
Oct 12 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中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
基于php常用正则表达式的整理汇总
2013/06/08 PHP
php中解析带中文字符的url函数分享
2015/01/20 PHP
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
laravel使用数据库测试注意事项
2020/04/10 PHP
sina的lightbox效果。
2007/01/09 Javascript
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
jquery图片播放浏览插件prettyPhoto使用详解
2014/12/19 Javascript
nodejs事件的监听与触发的理解分析
2015/02/12 NodeJs
初识Node.js
2015/03/20 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
2015/04/06 Javascript
js实现文字超出部分用省略号代替实例代码
2016/09/01 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
2016/12/14 Javascript
Bootstrap列表组学习使用
2017/02/09 Javascript
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
python PIL模块与随机生成中文验证码
2016/02/27 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
python:批量统计xml中各类目标的数量案例
2020/03/10 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
某公司部分笔试题
2013/11/05 面试题
员工拾金不昧表扬信
2014/01/09 职场文书
微笑服务演讲稿
2014/05/13 职场文书
群众路线教育实践活动实施方案
2014/10/31 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
2014年学生管理工作总结
2014/12/20 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
2016国培研修心得体会
2016/01/08 职场文书
2020优秀员工演讲稿(三篇)
2019/10/17 职场文书
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫
Python借助with语句实现代码段只执行有限次
2022/03/23 Python
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技
Android中的Launch Mode详情
2022/06/05 Java/Android