排序算法之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编程中字符串处理的5个技巧小结
Nov 13 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
Jul 12 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
Oct 31 PHP
PHPer 需要了解的 5 个 Composer 小技巧
Aug 18 PHP
PHP定时任务延缓执行的实现
Oct 08 PHP
ThinkPHP中关联查询实例
Dec 02 PHP
解析WordPress中的post_class与get_post_class函数
Jan 04 PHP
[原创]PHP简单开启curl的方法(测试可行)
Jan 11 PHP
php实现文章置顶功能的方法
Oct 20 PHP
php微信开发之关键词回复功能
Jun 13 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
Oct 21 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解压tar.gz格式文件的方法
2016/02/14 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
基于jQuery创建鼠标悬停效果的方法
2015/03/07 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
2017/07/24 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
vue+iview实现文件上传
2020/11/17 Vue.js
详解python3中zipfile模块用法
2018/06/18 Python
Python Flask框架扩展操作示例
2019/05/03 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
Gauss-Seidel迭代算法的Python实现详解
2019/06/29 Python
Python 下载及安装详细步骤
2019/11/04 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
2020/03/10 Python
关于Python解包知识点总结
2020/05/05 Python
python调用API接口实现登陆短信验证
2020/05/10 Python
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
让IE9以下版本的浏览器兼容HTML5的方法
2014/03/12 HTML / CSS
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
Volcom英国官方商店:美国殿堂级滑板、冲浪、滑雪服装品牌
2019/03/13 全球购物
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
绘画设计学生的个人自我评价
2013/09/20 职场文书
中学生差生评语
2014/01/30 职场文书
代理协议书范本
2014/04/22 职场文书
会员活动策划方案
2014/08/19 职场文书
新课培训心得体会
2014/09/03 职场文书
2014年少先队工作总结
2014/12/03 职场文书
青春雷锋观后感
2015/06/10 职场文书
《称赞》教学反思
2016/02/17 职场文书
Mysql 如何查询时间段交集
2021/06/08 MySQL
Nginx配置根据url参数重定向
2022/04/11 Servers