设为首页收藏本站

就爱编程论坛

 找回密码
 注册

人人连接登陆

无需注册,直接登录

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 268|回复: 0
打印 上一主题 下一主题

PHP排序算法 [复制链接]

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    无聊
    2025-5-27 03:37:20
  • 签到天数: 366 天

    [LV.9]以坛为家II

    论坛先锋 学习至圣 荣誉成员 论坛元老 活跃之星 终极领袖

    我玩的应用:

    跳转到指定楼层
    楼主
    发表于 2012-3-29 00:21:42 |只看该作者 |倒序浏览
    <?php
    //冒泡排序
    function BubbleSort($arr) {
    // 获得数组总长度
    $num = count($arr);
    // 正向遍历数组
    for ($i = 1; $i < $num; $i++) {
    // 反向遍历
    for ($j = $num - 1; $j >= $i ; $j--) {
    // 相邻两个数比较
    if ($arr[$j] < $arr[$j-1]) {
    // 暂存较小的数
    $iTemp = $arr[$j-1];
    // 把较大的放前面
    $arr[$j-1] = $arr[$j];
    // 较小的放后面
    $arr[$j] = $iTemp;
    }
    }
    }
    return $arr;
    }
    
    // 交换法排序
    function ExchangeSort($arr){
    $num = count($arr);
    // 遍历数组
    for ($i = 0;$i < $num - 1; $i++) {
    // 获得当前索引的下一个索引
    for ($j = $i + 1; $j < $num; $j++) {
    // 比较相邻两个的值大小
    if ($arr[$j] < $arr[$i]) {
    // 暂存较小的数
    $iTemp = $arr[$i];
    // 把较大的放前面
    $arr[$i] = $arr[$j];
    // 较小的放后面
    $arr[$j] = $iTemp;
    }
    }
    }
    return $arr;
    }
    
    // 选择法排序
    function SelectSort($arr) {
    // 获得数组总长度
    $num = count($arr);
    // 遍历数组
    for ($i = 0;$i < $num-1; $i++) {
    // 暂存当前值
    $iTemp = $arr[$i];
    // 暂存当前位置
    $iPos = $i;
    // 遍历当前位置以后的数据
    for ($j = $i + 1;$j < $num; $j++){
    // 如果有小于当前值的
    if ($arr[$j] < $iTemp) {
    // 暂存最小值
    $iTemp = $arr[$j];
    // 暂存位置
    $iPos = $j;
    }
    }
    // 把当前值放到算好的位置
    $arr[$iPos] = $arr[$i];
    // 把当前值换成算好的值
    $arr[$i] = $iTemp;
    }
    return $arr;
    }
    
    // 插入法排序
    function InsertSort($arr){
    $num = count($arr);
    // 遍历数组
    for ($i = 1;$i < $num; $i++) {
    // 获得当前值
    $iTemp = $arr[$i];
    // 获得当前值的前一个位置
    $iPos = $i - 1;
    // 如果当前值小于前一个值切未到数组开始位置
    while (($iPos >= 0) && ($iTemp < $arr[$iPos])) {
    // 把前一个的值往后放一位
    $arr[$iPos + 1] = $arr[$iPos];
    // 位置递减
    $iPos--;
    }
    $arr[$iPos+1] = $iTemp;
    }
    return $arr;
    }
    
    // 快速排序
    function QuickSort($arr){
    $num = count($arr);
    $l = $r = 0;
    $left = $right = array();
    // 从索引的第二个开始遍历数组
    for ($i = 1;$i < $num; $i++) {
    // 如果值小于索引1
    if ($arr[$i] < $arr[0]) {
    // 装入左索引数组(小于索引1的数据)
    $left[] = $arr[$i];
    $l++;
    } else {
    // 否则装入右索引中(大于索引1的数据)
    $right[] = $arr[$i];
    $r++; //
    } 
    }
    // 如果左索引有值 则对左索引排序
    if($l > 1) {
    $left = QuickSort($left);
    }
    // 排序后的数组
    $new_arr = $left;
    // 将当前数组第一个放到最后
    $new_arr[] = $arr[0];
    // 如果又索引有值 则对右索引排序
    if ($r > 1) {
    $right = QuickSort($right);
    }
    // 根据右索引的长度再次增加数据
    for($i = 0;$i < $r; $i++) {
    $new_arr[] = $right[$i];
    }
    return $new_arr;
    }
    ?>



    该贴已经同步到 admin的微博
    分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    分享分享0 收藏收藏0 支持支持0 反对反对0 分享到人人 转发到微博
    [img=http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=fRUcHhYWGAQ9GxIFEBwUEVMeEhA]http://rescdn.qqmail.com/zh_CN/htmledition/images/function/qm_open/ico_mailme_02.png[/img]

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册 人人连接登陆

    晴云孤魂's Blog|就爱编程搜帖|手机版|Archiver|就爱编程论坛     

    GMT+8, 2025-7-2 05:56 , Processed in 0.099295 second(s), 26 queries .

    Powered by Discuz! X2

    © 2001-2011 Comsenz Inc.

    回顶部