排序算法之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+highchats生成动态统计图
May 21 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
Jul 28 PHP
Yii的CDbCriteria查询条件用法实例
Dec 04 PHP
php去掉文件前几行的方法
Jul 29 PHP
PHP匿名函数和use子句用法实例
Mar 16 PHP
PHP多进程编程总结(推荐)
Jul 18 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
Sep 09 PHP
php mysql 封装类实例代码
Sep 18 PHP
php curl常用的5个经典例子
Jan 20 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
Jan 29 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
Apr 12 PHP
php统计数组不同元素的个数的实例方法
Sep 26 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扩展编写点滴 技巧收集
2010/03/09 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
php对微信支付回调处理的方法
2018/08/23 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
Javascript Global对象
2009/08/13 Javascript
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
jquery 如何动态添加、删除class样式方法介绍
2012/11/07 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
2014/06/23 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
JS跨域问题详解
2014/11/25 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
详细分析使用AngularJS编程中提交表单的方式
2015/06/19 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
AngularJS基础 ng-focus 指令简单示例
2016/08/01 Javascript
vue2 router 动态传参,多个参数的实例
2017/11/10 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
原生js实现的移动端可拖动进度条插件功能详解
2019/08/15 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
分享Python字符串关键点
2015/12/13 Python
Android应用开发中Action bar编写的入门教程
2016/02/26 Python
Python中的日期时间处理详解
2016/11/17 Python
python利用拉链法实现字典方法示例
2017/03/25 Python
python3个性签名设计实现代码
2018/06/19 Python
python进阶之多线程对同一个全局变量的处理方法
2018/11/09 Python
python操作cfg配置文件方式
2019/12/22 Python
Python+PyQt5实现灭霸响指功能
2020/05/25 Python
Pytorch mask-rcnn 实现细节分享
2020/06/24 Python
学生会竞选自荐信
2013/10/12 职场文书
学生会个人自荐书范文
2014/02/12 职场文书
婚礼答谢礼品
2015/01/20 职场文书
开学第一周日记(三篇范文)
2019/08/23 职场文书