排序算法之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 Undefined index和Undefined variable的解决方法
Mar 27 PHP
Ha0k 0.3 PHP 网页木马修改版
Oct 11 PHP
PHP 函数学习简单小结
Jul 08 PHP
PHP验证码函数代码(简单实用)
Sep 29 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
Aug 28 PHP
PHP遍历数组的三种方法及效率对比分析
Feb 12 PHP
php中return的用法实例分析
Feb 28 PHP
PHP pear安装配置教程
May 14 PHP
PHP性能优化大全(php.ini)
May 20 PHP
php数值转换时间及时间转换数值用法示例
May 18 PHP
使用laravel和ECharts实现折线图效果的例子
Oct 09 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学习笔记之 函数声明
2011/06/09 PHP
如何判断php数组的维度
2013/06/10 PHP
php中require和require_once的区别说明
2014/02/27 PHP
Yii框架登录流程分析
2014/12/03 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
2020/06/06 PHP
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
escape函数解决js中ajax传递中文出现乱码问题
2014/10/30 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
JavaScript通过代码调用Flash显示的方法
2016/02/02 Javascript
Javascript删除指定元素节点的方法
2016/06/21 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
javascript canvas检测小球碰撞
2020/04/17 Javascript
全面解析Vue中的$nextTick
2020/12/24 Vue.js
python实现音乐下载器
2018/04/15 Python
python中单下划线_的常见用法总结
2018/07/10 Python
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
用python爬取租房网站信息的代码
2018/12/14 Python
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
Django后端接收嵌套Json数据及解析详解
2019/07/17 Python
解决python 文本过滤和清理问题
2019/08/28 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
商务英语本科生的自我评价分享
2013/11/15 职场文书
初中科学教学反思
2014/01/21 职场文书
2014年三万活动总结
2014/04/26 职场文书
运动会演讲稿50字
2014/08/25 职场文书
孩子教育的心得体会
2014/09/01 职场文书
干部作风整顿个人剖析材料
2014/10/06 职场文书
财务出纳岗位职责
2015/03/31 职场文书
行政司机岗位职责
2015/04/10 职场文书