2019独角兽企业重金招聘Python工程师标准>>>

快速排序是一种分治的排序算法,采用递归的思想,将数组元素分为两部分,选择切分元素,左右扫描数组,将大于切分元素的数据放在右边,小于切分元素的数据放在左边,直到扫描指针相遇,切分结束,同时递归调用,直到数组有序。

代码如下:

<?php
function quick_sort(array& $array,$low,$high){if($low >= $high){return $array;//递归出口,数组的最高位下标小于数组最低位下标}$i = $low;$j = $high+1;    //数组切分循环$v = $array[$low];//切分元素while(true){//循环查找while($array[--$j] >= $v)if($j == $low)break;//从右往左查找第一个比$v小的元素while($array[++$i] <= $v)if($i == $high)break;//从左往右查找第一个比$v大的元素if($i >= $j)break;//指针相遇$tmp = $array[$j];$array[$j] = $array[$i];$array[$i] = $tmp;    //元素位置交换}$array[$low] = $array[$j];$array[$j]= $v;//将切分元素放入相应位置quick_sort($array,$low,$j-1);quick_sort($array,$j+1,$high); //递归调用}$array = array('1','3','2','5','6','5');
$high = count($array);
quick_sort($array,0,$high-1);
var_dump($array);
?>

同时也可以用shuffle()函数对数组进行打乱,以便消除对输入的依赖~

转载于:https://my.oschina.net/aqingyan/blog/758901

PHP快速排序(原地切分)相关推荐

  1. 排序---快速排序及其切分函数Partition应用

    快速排序   快速排序通过一个切分元素将数组分成两个子数组,左子数组小于等于切分元素,右子数组大于切分元素,将这两个子数组排序,也就是将整个数组排序了. 代码如下: public class Sort ...

  2. 《Algorithms》Comparable 实现快速排序三向切分的快速排序

    快速排序 快速排序的切分 完整的快速排序 三向切分的快速排序(快排的改进版) 快速排序是目前使用最广泛的排序,同时也是目前最快的排序,它也体现了分治的思想:将数组分成两部分,并分别独立地进行排序,和归 ...

  3. 快速排序-排序-数据结构和算法

    文章目录 1 基本算法 1.1 原地切分 1.2 边界 1.3 随机性 1.4 终止循环 1.5 切分元素重复 1.6 终止递归 2 备注 1 基本算法 ​ 快速排序是一种分治的排序算法.它将一个数组 ...

  4. 排序算法乱炖: 快速排序、归并排序、冒泡排序

    一. 快速排序(属于自顶向下) 1. 快速排序原地版 最好情况的时间复杂度:O(nlogn),logn为递归的层数,n为每层递归中总的时间复杂度. 最差情况的时间复杂度:O(n*n) def quic ...

  5. 算法笔记(JavaScript版)——排序

    算法笔记(JavaScript版)--排序 本文内容根据Rebert Sedgewick和Kevin Wayne的<算法(第四版)>整理,原代码为java语言,自己修改为JavaScrip ...

  6. java 全排序_Java排序算法全

    Java排序算法代码 零. 排序基类 package com.yunche.sort; /** * @ClassName: BaseSort * @Description: * @author: yu ...

  7. 从原则、方案、策略及难点阐述分库分表

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_34173549/article/details/79936693 一.分库分表原则 关系型数据 ...

  8. MySQL数据库基础详解

    文章大纲 一.数据库简介 二.Mysql数据库简介 三.Mysql安装与服务启动(Windows版本) 四.Mysql图形化工具 五.Mysql存储引擎精讲 六.Mysql数据类型介绍 七.Mysql ...

  9. MySQL数据库基础详解(非原创)

    文章大纲 一.数据库简介 二.Mysql数据库简介 三.Mysql安装与服务启动(Windows版本) 四.Mysql图形化工具 五.Mysql存储引擎精讲 六.Mysql数据类型介绍 七.Mysql ...

最新文章

  1. 建设有竞争力的APP开发团队
  2. linux 将test.log中第1行的所有都替换成,【Linux面试题7】三剑客笔试题集合
  3. sketchup 图片转模型_你应该知道的那些 Sketchup 实用快捷键和使用技巧!
  4. linux内核研究(一)
  5. linux查询内存条个数,linux下查看内存条数及每根内存大小的实现方法(推荐)
  6. 容器编排技术 -- 使用 kubectl 创建Deployment
  7. C++设计模式详解之外观模式解析
  8. codeforce #165 div2
  9. JDK 下载和安装教程
  10. 初学平面设计者应该掌握的软件是AI
  11. DIV布局鲜花超市网站设计——鲜花超市(4页) HTML+CSS+JavaScript HTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作
  12. linux下通过ping命令监控网络抖动脚本
  13. PE文件格式偏移参考
  14. Openstack日常运维
  15. Debian vmtools安装后 不能复制粘贴文件
  16. c#设计一个Windows应用程序,模拟一个简单的银行账户管理系统。完成“创建账A款”“存款”和“查询余额”的模拟操作。程序功能如下:
  17. excel数据透视表_Excel数据透视表可轻松实现总计
  18. 0906期最新上市——“架构师大阅兵”
  19. 向假视频宣战!研究人员开发出了鉴定假视频的“照妖镜”
  20. 智能硬件产品经理需要哪些技术基础?

热门文章

  1. linux中软件包管理
  2. CSS+JS灰色树型菜单导航代码
  3. WCF中绑定的简单介绍
  4. PHP 入门 - 7.Web技术
  5. leetcode 392
  6. Multidex(二)之Dex预加载优化
  7. 【题解】 bzoj1503: [NOI2004]郁闷的出纳员 (Splay)
  8. Elasticsearch DSL中Query与Filter的不同
  9. 【Hadoop】MapReduce笔记(二):MapReduce容错,任务失败处理
  10. 任意组合指令达到免杀