当前位置: 首页 > news >正文

[php] 数据结构算法(PHP描述) 快速排序 quick sort

 1 <?php
 2 /**
 3  * 快速排序 quick sort
 4  * 
 5  **/
 6 
 7 function sort_quick($arrData) {
 8     if(empty($arrData) || !is_array($arrData)) return false;
 9 
10     $flag = $arrData[0];
11     $len  = count($arrData) - 1;
12     if($len == 0) return $arrData; // 如果只有一个数据的数组直接返回
13 
14     $arrLeft  = array();
15     $arrRight = array();
16     $len_l    = 0;
17     $len_r    = 0;
18     for($i = 1; $i <= $len;$i++) {
19         if($arrData[$i] < $flag) {
20             $arrLeft[$len_l]  = $arrData[$i]; // 小于的放左边
21             $len_l++;
22         } else {
23             $arrRight[$len_r] = $arrData[$i]; // 大于等于的放右边
24             $len_r++;
25         } 
26     }
27 
28     // 合并数组
29     $arrResult = array();
30     if($len_l) {
31         $arrLeft = sort_quick($arrLeft);
32         for($i = 0;$i <= $len_l - 1; $i++ ) {
33             $arrResult[$i] = $arrLeft[$i]; 
34         }
35     }
36     $arrResult[$len_l] = $flag;
37     $len_l++;
38     if($len_r) {
39         $arrRight = sort_quick($arrRight);
40         for($i = 0;$i <= $len_r - 1; $i++ ) {
41             $arrResult[$len_l] = $arrRight[$i];
42             $len_l++;
43         }
44     }
45     echo "== ",$flag," ==========================================<br/>";
46     echo "data        : ",print_r($arrData),"<br/>";
47     echo "filter  left: ",print_r($arrLeft),"<br/>";
48     echo "filter right: ",print_r($arrRight),"<br/>"; 
49     echo "return      : ",print_r($arrResult),"<br/>"; 
50 
51     return $arrResult;
52 }
53 //$list = array(4,3,2,1,5,7,3,7);
54 $list = array(4,51,6,73,2,5,9,33,50,3,4,6,1,4,67);
55 $list = sort_quick($list);
56 echo "<pre>";print_r($list);

相关文章:

  • Macbook双系统多分区的解决方案
  • java好的IO示例
  • MyBatis的动态SQL详解
  • 目标模型和现实模型
  • 在pictureBox中拖动图片的实现代码
  • linux-文件类型
  • dll分析
  • 选择Drupal的10大理由
  • argc argv 的使用
  • 劣质电源线引发的硬盘故障
  • struts2常用标签
  • ip_vs实现分析(3)
  • linux 系统基础知识 - 卷管理
  • 解决 umount 时出现的 Device is busy
  • silverlight 在主流浏览器中的问题
  • [Vue CLI 3] 配置解析之 css.extract
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【Linux系统编程】快速查找errno错误码信息
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 2018一半小结一波
  • 77. Combinations
  • Next.js之基础概念(二)
  • Python连接Oracle
  • webpack4 一点通
  • 从伪并行的 Python 多线程说起
  • 使用common-codec进行md5加密
  • 使用docker-compose进行多节点部署
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • FaaS 的简单实践
  • Nginx实现动静分离
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • $.each()与$(selector).each()
  • $jQuery 重写Alert样式方法
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (三)uboot源码分析
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .CSS-hover 的解释
  • .net core webapi 大文件上传到wwwroot文件夹
  • .Net MVC + EF搭建学生管理系统
  • .NET 常见的偏门问题
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET连接MongoDB数据库实例教程
  • .net下的富文本编辑器FCKeditor的配置方法
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @Repository 注解
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解