PHP快速排序(原地切分)
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快速排序(原地切分)相关推荐
- 排序---快速排序及其切分函数Partition应用
快速排序 快速排序通过一个切分元素将数组分成两个子数组,左子数组小于等于切分元素,右子数组大于切分元素,将这两个子数组排序,也就是将整个数组排序了. 代码如下: public class Sort ...
- 《Algorithms》Comparable 实现快速排序三向切分的快速排序
快速排序 快速排序的切分 完整的快速排序 三向切分的快速排序(快排的改进版) 快速排序是目前使用最广泛的排序,同时也是目前最快的排序,它也体现了分治的思想:将数组分成两部分,并分别独立地进行排序,和归 ...
- 快速排序-排序-数据结构和算法
文章目录 1 基本算法 1.1 原地切分 1.2 边界 1.3 随机性 1.4 终止循环 1.5 切分元素重复 1.6 终止递归 2 备注 1 基本算法 快速排序是一种分治的排序算法.它将一个数组 ...
- 排序算法乱炖: 快速排序、归并排序、冒泡排序
一. 快速排序(属于自顶向下) 1. 快速排序原地版 最好情况的时间复杂度:O(nlogn),logn为递归的层数,n为每层递归中总的时间复杂度. 最差情况的时间复杂度:O(n*n) def quic ...
- 算法笔记(JavaScript版)——排序
算法笔记(JavaScript版)--排序 本文内容根据Rebert Sedgewick和Kevin Wayne的<算法(第四版)>整理,原代码为java语言,自己修改为JavaScrip ...
- java 全排序_Java排序算法全
Java排序算法代码 零. 排序基类 package com.yunche.sort; /** * @ClassName: BaseSort * @Description: * @author: yu ...
- 从原则、方案、策略及难点阐述分库分表
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_34173549/article/details/79936693 一.分库分表原则 关系型数据 ...
- MySQL数据库基础详解
文章大纲 一.数据库简介 二.Mysql数据库简介 三.Mysql安装与服务启动(Windows版本) 四.Mysql图形化工具 五.Mysql存储引擎精讲 六.Mysql数据类型介绍 七.Mysql ...
- MySQL数据库基础详解(非原创)
文章大纲 一.数据库简介 二.Mysql数据库简介 三.Mysql安装与服务启动(Windows版本) 四.Mysql图形化工具 五.Mysql存储引擎精讲 六.Mysql数据类型介绍 七.Mysql ...
最新文章
- 建设有竞争力的APP开发团队
- linux 将test.log中第1行的所有都替换成,【Linux面试题7】三剑客笔试题集合
- sketchup 图片转模型_你应该知道的那些 Sketchup 实用快捷键和使用技巧!
- linux内核研究(一)
- linux查询内存条个数,linux下查看内存条数及每根内存大小的实现方法(推荐)
- 容器编排技术 -- 使用 kubectl 创建Deployment
- C++设计模式详解之外观模式解析
- codeforce #165 div2
- JDK 下载和安装教程
- 初学平面设计者应该掌握的软件是AI
- DIV布局鲜花超市网站设计——鲜花超市(4页) HTML+CSS+JavaScript HTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作
- linux下通过ping命令监控网络抖动脚本
- PE文件格式偏移参考
- Openstack日常运维
- Debian vmtools安装后 不能复制粘贴文件
- c#设计一个Windows应用程序,模拟一个简单的银行账户管理系统。完成“创建账A款”“存款”和“查询余额”的模拟操作。程序功能如下:
- excel数据透视表_Excel数据透视表可轻松实现总计
- 0906期最新上市——“架构师大阅兵”
- 向假视频宣战!研究人员开发出了鉴定假视频的“照妖镜”
- 智能硬件产品经理需要哪些技术基础?