快速排序算法

2023-05-16

快速排序:



代码:
<?php
/** 快速排序算法
* 1. 在数组中找一个元素作为key,一般取数组第一个元素作为key
* 2. i=0, j=数组长度-1
* 3. j-- 当 arr[j]<key, arr[i]与arr[j]交换位置
* 4. i++ 当 arr[i]>key, arr[i]与arr[j]交换位置
* 5. 重复3,4 直到 i==j 时,完成。
* 6. 将key分隔的左右两组元素再分别执行 1,2,3,4,5 (递归)。
*/

$arr = array();

// 创建数组
for($i=0; $i<20; $i++){
    array_push($arr, mt_rand(1,200));
}

echo 'source arr:'.implode(',', $arr).'<br>';

quicksort($arr, 0, count($arr)-1);

echo 'sorted arr:'.implode(',', $arr);

// 快速排序
function quicksort(&$arr, $low, $high){

    if($low>=$high){
        return ;
    }

    $i = $low;
    $j = $high;
    $flag = 1; // 0:i动作 1:j动作

    $key = $arr[$low];

    while($i<$j){
        switch($flag){
            case 0: // i
                if($arr[$i]>$key){
                    $tmp = $arr[$i];
                    $arr[$i] = $arr[$j];
                    $arr[$j] = $tmp;
                    $flag = 1;
                }else{
                    $i++;
                }
                break;

            case 1: // j
                if($arr[$j]<$key){
                    $tmp = $arr[$i];
                    $arr[$i] = $arr[$j];
                    $arr[$j] = $tmp;
                    $flag = 0;
                }else{
                    $j--;
                }
                break;
        }
    }

    // left arr
    quicksort($arr, $low, $i-1);

    // right arr
    quicksort($arr, $i+1, $high);

}

?>


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速排序算法 的相关文章

  • PHP生成唯一RequestID类

    本文介绍PHP生成唯一RequestID类 xff0c 使用session create id 与uniqid 方法 xff0c 保证唯一性 xff0c 提供完整代码及演示 xff0c 方便大家学习使用 现在的系统设计一般使用分布式系统 x
  • php生成QRcode

    lt php ini set 39 display errors 39 39 on 39 PNG TEMP DIR 61 dirname FILE DIRECTORY SEPARATOR 39 temp 39 DIRECTORY SEPAR
  • C语言--函数

    C语言中include头文件的语法 xff1a include lt stdio h gt xff0c 先从系统include文件中寻找 xff0c 再去项目include中寻找 xff1b include 34 my h 34 xff0c
  • JS获取CSS属性值

    lt DOCTYPE HTML PUBLIC 34 W3C DTD HTML 4 01 Transitional EN 34 34 http www w3 org TR html4 loose dtd 34 gt lt html gt lt
  • JS判断碰撞方法

    JS判断碰撞方法 判断是否碰撞 64 param obj 原对象 64 param dobj 目标对象 function impact obj dobj var o 61 x getDefaultStyle obj 39 left 39 y
  • PHP字符串比较

    我们在代码中用的最多的逻辑是什么 你知道如下的几段代码的布尔结果分别是什么么 var dump 34 1 34 61 61 34 1e0 34 var dump 34 1 34 61 61 34 0x1 34 var dump 34 20
  • 播放音乐方法(兼容IE FF Chrome Opera Safari)

    音乐播放器 64 param obj 播放器id 64 param file 音频文件 mp3 ogg 64 param loop 是否循环 function audioplayer id file loop var audioplayer
  • PHP AES256加密算法

    aes class php lt php AES implementation in PHP c Chris Veness 2005 2011 Right of free use is granted for all commercial
  • javascript var 重要性

    javascript 的 var 作用是声明变量 一般情况下不写都不会出错 xff0c 但有些情况如果不写 xff0c 会有不同的结果 lt div id 61 34 a 34 gt lt div gt lt script type 61
  • mysql判斷字段是否存在方法

    1 desc 命令 格式 desc tablename columnname 例子 desc 96 table 96 96 mid 96 desc 96 table 96 39 abc 39 2 show columns 命令 格式 sho
  • php 发送带附件邮件

    emailclass php lt class CMailFile var subject var addr to var text body var text encoded var mime headers var mime bound
  • ubuntu系统使用命令

    1 复位面板 打开终端 xff0c 终端窗口打开之后 xff0c 立即在提示符后面输入下列命令 gconftool recursive unset apps panel rm rf gconf apps panel pkill gnome
  • Windows安装Anaconda并且配置国内镜像教程

    前言 我们在学习 Python 的时候需要不同的 Python 版本 xff0c 关系到电脑环境变量配置换来换去很是麻烦 xff0c 所以这个时候我们需要一个虚拟的 Python 环境变量 xff0c 我之前也装过 virtualenv v
  • linux常用命令

    1 ls 显示目录文件夹及文件 使用方式 ls lt a 显示目录下所有文件及文件夹包括 与 A 显示目录下所有文件及文件夹不包括 与 l 显示目录下所有文件及文件夹详细信息 t 按修改时间排序 倒序 F 如目录后加 如可执行文件后加 r
  • shell语法

    1 数组 定义数组 array 61 34 163 34 34 21cn 34 34 sina 34 34 qq 34 获取数组长度 echo array 遍历数组 for arr in array do echo arr done 2 转
  • php 替换敏感字符串

    StrFilter class php lt php string filter class Date 2013 01 09 Author fdipzone Ver v1 0 Func public replace 替换非法字符 publi
  • php返回数据格式化类

    DataReturn class php lt php 返回數據格式化類 Date 2011 08 15 Author fdipzone class DataReturn class start private type private x
  • 强制更新图片缓存

    強制更新圖片緩存 64 param Array files 要更新的圖片 64 param int version 版本 function force reload file files 61 array version 61 0 html
  • php XML文件解释类

    XMLParser class php lt php XML 文件分析类 Date 2013 02 01 Author fdipzone Ver 1 0 func loadXmlFile xmlfile 读入xml文件输出Array loa
  • php CSS Update Class

    CSSUpdate class php lt php css 更新类 更新css文件内图片的版本 Date 2013 02 05 Author fdipzone Ver 1 1 Func update Ver 1 1 增加search ch

随机推荐

  • sh cssupdate

    shell sh 更新 css图片版本 bin bash csstmpl path 61 34 home fdipzone php csstmpl 34 css path 61 34 home fdipzone php css 34 rep
  • JS小游戏-宇宙战机

    游戏介绍 业余时间写的一个飞行射击游戏 xff0c 纵向 xff0c 共六关 游戏需求 1 战机可发射子弹 xff0c 子弹可通过获取道具升级 2 战机可放bomb xff0c 可获取道具增加数量 3 战机可蓄力攻击 4 道具有三种 xff
  • php __call 与 __callStatic

    php 5 3 后新增了 call 与 callStatic 魔法方法 call 当要调用的方法不存在或权限不足时 xff0c 会自动调用 call 方法 callStatic 当调用的静态方法不存在或权限不足时 xff0c 会自动调用 c
  • $CF1153A\ Serval\ and\ Bus$

    看大佬的代码都好复杂 xff08 不愧是大佬 orz 蒟蒻提供一种思路 因为求的是最近的车对吧 qwq 所以我们可以用一个 while 循环所以没必要去用什么 for 至于这是 div2 的第一题还是比较水的 code include lt
  • Sublime Text配置JDK

    操作系统 xff1a Windows 7 SP1 Sublime Text是一款轻量级代码编辑器 虽然收费 xff0c 但可以无限期试用 支持多种语言的代码高亮 xff0c 但一些不能直接编译运行 xff0c 今天我为大家带来Sublime
  • JS小游戏-仙剑翻牌

    游戏介绍 这是一个翻牌配对游戏 xff0c 共十关 1 游戏随机从42张牌中抽取9张进行游戏 xff0c 每组为2张相同的牌 xff0c 共18张牌 2 连续翻到两张相同的为胜利 xff0c 当9组全部翻到则过关 如不是翻到连续两张相同的
  • memcached 常用命令及使用说明

    memcached 查看方法 格式 telnet ip port 例如 telnet localhost 11211 退出命令 xff1a quit 一 存储命令 存储命令格式 xff1a lt command name gt lt key
  • PHPMailer - PHP email transport class

    在服务器安装 sendmail sudo apt get install sendmail 启动 sendmail sudo etc init d sendmail start 修改 php ini mail function SMTP 6
  • PHP 遍历文件夹及文件类及处理类

    FindFile class php 用于遍历目录文件 lt php 遍历文件夹及文件类 Date 2013 03 21 Author fdipzone Ver 1 0 class FindFile public files 61 arra
  • sh autolog backup

    shell sh 每天备份log文件 bin bash 每天备份log文件 log path 61 34 home fdipzone logs 34 log目录 backup path 61 34 home fdipzone logs ba
  • Apache rewrite

    1 开启rewrite sudo a2enmod rewrite 2 停用rewrite sudo a2dismod rewrite 3 服务器环境变量 Apache提供给rewirte模块的环境变量大概分成5个类型 第一部分 HTTP h
  • RewriteCond和13个mod_rewrite应用举例Apache伪静态

    1 xff0e 给子域名加www标记 RewriteCond HTTP HOST a z 43 example com NC RewriteCond HTTP HOST www NC RewriteRule http www xample
  • 正向代理与反向代理的区别

    正向代理的概念 正向代理 也就是传说中的代理 他的工作原理就像一个跳板 简单的说 我是一个用户 我访问不了某网站 但是我能访问一个代理服务器 这个代理服务器呢 他能访问那个我不能访问的网站 于是我先连上代理服务器 告诉他我需要那个无法访问网
  • Apache 搭建虚拟主机

    Apache 搭建虚拟主机方法 DocumentRoot xff1a home fdipzone sites demo fdipzone com ServerName xff1a demo fdipzone com 1 进入apache虚拟
  • sh memcached 进程启动及监控

    memcached 进程启动及监控 1 memcached inc sh 设置路径 xff0c 端口等讯息 bin sh config include HOST 61 hostname SITE 61 34 mysite 34 PORT 6
  • 设置进程的显示名称

    有时候在LINUX下 xff0c fork子进程的时候 xff0c 像nginx里的一样 xff0c 想让子进程的名字可以自定义 参考网上文章之后 xff0c 可以通过修改argv 0 的值来改变子进程的名字 xff0c 但是要注意新标题的
  • 自动登入google play下载app report

    流程 1 登入google play 登入google play需要三步 https play google com apps publish https accounts google com ServiceLogin hl 61 en
  • sh cssupdate 优化

    bin bash 更新css文件内图片的版本 如background url 39 images test jpg 39 更新为 background url 39 images test jpg 20130330121210 39 css
  • php click captcha 验证码类

    需求 xff1a 现在常用的表单验证码大部分都是要用户输入为主 xff0c 但这样对手机用户会不方便 如果手机用户访问 xff0c 可以不用输入 xff0c 而是click某一位置便可确认验证码 xff0c 这样就会方便很多 原理 xff1
  • 快速排序算法

    快速排序 xff1a 代码 xff1a lt php 快速排序算法 1 在数组中找一个元素作为key 一般取数组第一个元素作为key 2 i 61 0 j 61 数组长度 1 3 j 当 arr j lt key arr i 与arr j