排序算法之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伪静态写法附代码
Jun 20 PHP
php获取网页内容方法总结
Dec 04 PHP
php 获取远程网页内容的函数
Sep 08 PHP
非常好用的Zend Framework分页类
Jun 25 PHP
PHP基于imap获取邮件实例
Nov 11 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
Feb 08 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
Jun 29 PHP
PHP模糊查询技术实例分析【附源码下载】
Mar 07 PHP
Laravel如何创建服务器提供者实例代码
Apr 15 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
Apr 16 PHP
php给数组赋值的实例方法
Sep 26 PHP
PHP7修改的函数
Mar 09 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
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
PHP编程过程中需要了解的this,self,parent的区别
2009/12/30 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
2019/10/22 PHP
JavaScript iframe的相互操作浅析
2009/10/14 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
2015/05/20 Javascript
浅析Javascript中bind()方法的使用与实现
2016/04/29 Javascript
jQuery flip插件实现的翻牌效果示例【附demo源码下载】
2016/09/20 Javascript
JS 实现可停顿的垂直滚动实例代码
2016/11/23 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
jQuery EasyUI 选项卡面板tabs的使用实例讲解
2017/12/25 jQuery
[03:16]DOTA2完美大师赛主赛事首日集锦
2017/11/23 DOTA
在Python的web框架中中编写日志列表的教程
2015/04/30 Python
Python中DJANGO简单测试实例
2015/05/11 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
Tensorflow 同时载入多个模型的实例讲解
2018/07/27 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
利用Pyhton中的requests包进行网页访问测试的方法
2018/12/26 Python
Python利用字典破解WIFI密码的方法
2019/02/27 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
2019/08/23 Python
python numpy 反转 reverse示例
2019/12/04 Python
Pycharm中Python环境配置常见问题解析
2020/01/16 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
详解Python yaml模块
2020/09/23 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
2020/12/07 Python
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
上海微创软件面试题
2012/06/14 面试题
AJax面试题
2014/11/25 面试题
单位单身证明范本
2014/01/11 职场文书
2014升学宴答谢词
2014/01/26 职场文书
节约用水倡议书
2014/04/16 职场文书
六年级学生评语
2014/04/22 职场文书
小学教师师德演讲稿
2014/05/06 职场文书
学习雷锋演讲稿
2014/05/10 职场文书
周恩来的四个昼夜观后感
2015/06/03 职场文书
企业愿景口号
2015/12/25 职场文书