排序算法之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 相关文章推荐
ADODB的数据库封包程序库
Dec 31 PHP
实用函数4
Nov 08 PHP
备份mysql数据库的php代码(一个表一个文件)
May 28 PHP
Laravel框架学习笔记(一)环境搭建
Oct 15 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
Oct 23 PHP
PHP中使用GD库创建圆形饼图的例子
Nov 19 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
Dec 29 PHP
php生成网页桌面快捷方式
May 05 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 PHP
PHP autoload使用方法及步骤详解
Sep 05 PHP
PHP加MySQL消息队列深入理解
Feb 27 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实现微信发红包程序
2015/08/24 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
2018/06/20 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
JQuery获取浏览器窗口内容部分高度的代码
2012/02/24 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
动态的9*9乘法表效果的实现代码
2016/05/16 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
2018/05/16 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
2019/07/19 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
Python 除法小技巧
2008/09/06 Python
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
Python第三方Window模块文件的几种安装方法
2018/11/22 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
python实现socket+threading处理多连接的方法
2019/07/23 Python
Django关于admin的使用技巧和知识点
2020/02/10 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
实习生自我鉴定
2013/12/12 职场文书
单位在职证明范本
2014/01/09 职场文书
服务员岗位责任制
2014/02/11 职场文书
巾帼文明岗申报材料
2014/05/01 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
2014年变电站工作总结
2014/12/19 职场文书
承诺书的内容有哪些,怎么写?
2019/06/21 职场文书
导游词之晋城蟒河
2019/12/12 职场文书
React-vscode使用jsx语法的问题及解决方法
2021/06/21 Javascript
SQL Server使用导出向导功能
2022/04/08 SQL Server
SQL Server删除表中的重复数据
2022/05/25 SQL Server