PHP实现快速排序算法
快速排序(Quick Sort)是对冒泡排序的一种改进,属不稳定排序算法,由东尼·霍尔在1962年提出。快速排序基本步骤:从数列中挑出一个元素(一般称为称为“基准”),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比基准小,另外一部分的所有数据都比基准大,与基准相等的数据可放在两部分中的任一部分,然后再按此方法递归地对这两部分数据分别进行处理,以达到整个数据变成有序序列。快速排序,最好情况下,时间复杂度为O(nlogn);最坏情况下,时间复杂度为O(n2);平均时间复杂度为O(nlogn)。
快速排序示例图:
 
| 
 
        1
        
        2
        
        3
        
        4
        
        5
        
        6
        
        7
        
        8
        
        9
        
        10
        
        11
        
        12
        
        13
        
        14
        
        15
        
        16
        
        17
        
        18
        
        19
        
        20
        
        21
        
        22
        
        23
        
        24
        
        25
        
        26
        
        27
        
        28
        
        29
        
        30
        
        31
        
        32
        
        33
        
        34
        
        35
        
        36
        
        37
        
        38
        
        39
        
        40
        
        41
        
        42
        
        43
        
        44
        
        45
        
        46
        
        47
        
        48
        
        49
        
        50
        
        51
        
        52
        
        53
        
        54
        
        55
        
        56
        
        57
        
        58
        
        59
        
        60
        
        61
        
        62
        
        63
        
        64
        
        65
        
        66
        
        67
        
        68
        
        69
        
        70
        
        71
        
        72
        
        73
        
        74
        
        75
        
        76
        
        77
        
        78
        
        79
        
        80
        
        81
        
        82
        
        83
        
        84
        
        85
        
        86
        
        87
        
        88
        
        89
        
        90
        
        91
        
        92
        
        93
        
        94
        
        95
        
        96
        
        97
        
        98
        
        99
        
        100
        
        101
        
        102
        
        103
        
        104
        
 | 
<?php
        /**
         * 数据结构与算法(PHP实现) - 快速排序(Quick Sort)。
         * 
         * @author 创想编程(TOPPHP.ORG)
         * @copyright Copyright (c) 2013 创想编程(TOPPHP.ORG) All Rights Reserved
         * @license http://www.opensource.org/licenses/mit-license.php MIT LICENSE
         * @version 1.0.0 - Build20130614
         */
        class QuickSort {
          /**
           * 需要排序的数据数组。
           * 
           * @var array
           */
          private$data;
          /**
           * 数据数组的长度。
           * 
           * @var integer
           */
          private$size;
          /**
           * 数据数组是否已排序。
           * 
           * @var boolean
           */
          private$done;
          /**
           * 构造方法 - 初始化数据。
           * 
           * @param array $data 需要排序的数据数组。
           */
          publicfunction__construct(array$data) {
            $this->data = $data;
            $this->size = count($this->data);
            $this->done = FALSE;
          }
          /**
           * 交换数据数组中两个元素的位置。
           * 
           * @param integer $x 元素在数组中的索引。
           * @param integer $y 元素在数组中的索引。
           */
          privatefunctionswap($x, $y) {
            $temp= $this->data[$x];
            $this->data[$x] = $this->data[$y];
            $this->data[$y] = $temp;
          }
          /**
           * 快速排序。
           * 
           * @param integer $left 数组第一个元素索引。
           * @param integer $right 数组最后一个元素索引。
           */
          privatefunctionsort($left, $right) {
            if($left >= $right) {
              return;
            }
            $pivot= $this->data[$left];
            $start= $left;
            $end= $right;
            while($start < $end) {
              while($start < $end&& $this->data[$end] >= $pivot) {
                --$end;
              }
              $this->swap($start, $end);
              while($start < $end&& $this->data[$start] < $pivot) {
                ++$start;
              }
              $this->swap($start, $end);
            }
            $this->sort($left, $start- 1);
            $this->sort($start+ 1, $right);
          }
          /**
           * 获取排序后的数据数组。
           * 
           * @return array 返回排序后的数据数组。
           */
          publicfunctiongetResult() {
            if($this->done) {
              return$this->data;
            }
            $this->sort(0, $this->size - 1);
            $this->done = TRUE;
            return$this->data;
          }
        }
        ?>
         | 
| 
 
      1
      
      2
      
      3
      
      4
      
 | 
<?php
      $quick = newQuickSort(array(5, 3, 8, 9, 6, 2));
      echo '<pre>', print_r($quick->getResult(), TRUE), '</pre>';
      ?>
       | 
PHP实现快速排序算法的更多相关文章
- 快速排序算法 java 实现
		
快速排序算法 java 实现 快速排序算法Java实现 白话经典算法系列之六 快速排序 快速搞定 各种排序算法的分析及java实现 算法概念 快速排序是C.R.A.Hoare于1962年提出的一种划分 ...
 - C# 集合扩展快速排序算法
		
/// <summary> /// 对集合进行排序,如 /// List<Person> users=new List<Person>(){.......} /// ...
 - PHP描述冒泡排序和快速排序算法
		
使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组.使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组.写一个二维数组排序算法函数,能够具有通用 ...
 - 快速排序算法(Java)
		
快速排序算法的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另外一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序. class Parti ...
 - 快速排序算法-C语言实现
		
注:本篇内容为翻译,之所以选择这篇进行翻译原因是该文章含有动画,能够更加直观地展示快速排序.同时,可以仔细看一下代码,代码中把结构化的思想给予了更加充分地表现.按照功能进行模块划分的思想得到了彻底地贯 ...
 - C#快速排序算法基础入门篇
		
相信算法对于许多开发人员来说都是一大难点,之所以难,就像设计模式一样,许多人在阅读之后,没有很好地理解,也不愿意动手上机操作,只停留在理论的学习上面,随着时间推移就慢慢淡忘. 有些东西,你可以发明创造 ...
 - 快速排序算法 Quick sort
		
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4046189.html 首先随机选择一个轴,并调整数组内各个数字,使得比轴值大的数在轴的右边, ...
 - Java快速排序算法
		
快速排序算法思想: 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一 ...
 - 排序系列 之 快速排序算法 —— Java实现
		
基本思想: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变 ...
 
随机推荐
- 手机SIM卡无法识别解决方案
			
SIM卡是工作中测试用的,经常插拔到不同的手机,前两天SIM卡放到手机中都能正常识别,今天插入到另一款手机中发现无法识别.心里糟了,是不是卡坏了,根据之 前的直觉,在公司找了一块橡皮,在SIM卡的芯片 ...
 - 使用mex进行混合编程的一些注意事项
			
1.mxGetPr的使用: Use mxGetPr on arrays of type double only. Use mxIsDouble to validate the mxArray type ...
 - OSGi 学习之路(4) - osgi的模块化 java在模块化的局限性
			
底层代码可见性控制 Java提供了private,public,protected和package private(无修饰符)这四种访问控制级别,不过这仅仅提供了底层的OO数据封装特性.包这个概念确实 ...
 - json转换成list map集合
			
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Set; i ...
 - 居然还有FindFirstChangeNotification函数
			
http://download.csdn.net/download/sololie/5966243
 - PAIP: Paradigms of Artificial Intelligence Programming
			
PAIP: Paradigms of Artificial Intelligence Programming PAIP: Paradigms of Artificial Intelligence Pr ...
 - “HTTP 错误 401.1 - 未授权:登录失败” iis配置和权限问题
			
今天,将项目发布到IIS服务器上,出现此问题,本地IIS访问正常. 登录失败说明根本登录不了,谈何访问网页,所以要从两方面下手,一.账户:二.账户权限: 一.设置你网站属性的时候,目录安全性-匿名访问 ...
 - Apache+Django+Mysql环境配置
			
环境要求:Apache:2.2 Mysql:5.5 Django:1.5 python:2.7 首先下载mod_wsgi-win32-ap22py27-3.3.so 下载下来后,改名成mod_wsg ...
 - thinkphp URL规则、URL伪静态、URL路由、URL重写、URL生成(十五)
			
原文:thinkphp URL规则.URL伪静态.URL路由.URL重写.URL生成(十五) 本章节:详细介绍thinkphp URL规则.URL伪静态.URL路由.URL重写.URL生成 一.URL ...
 - 浅析点对点(End-to-End)的场景文字识别(图片文字)
			
一.背景 随着智能手机的广泛普及和移动互联网的迅速发展,通过手机等移动终端的摄像头获取.检索和分享资讯已经逐步成为一种生活方式.基于摄像头的 (Camera-based)的应用更加强调对拍摄场景的理解 ...