zoukankan      html  css  js  c++  java
  • PHP 合并排序

    • 合并排序是稳定排序,平均效率为O(nlogn),需要的辅助空间是O(n)
     1 <?php
     2     #归并排序
     3     #@param    $arr    待排序数组
     4     #@param    $from    排序的起始坐标
     5     #@param    $end    排序的结束坐标
     6     function mergeSort(&$arr, $from, $end) {
     7         #切分数组直到数组元素只剩下一个
     8         if($from < $end) {
     9             $mid = floor(($from + $end) / 2);
    10             mergeSort($arr, $from, $mid);
    11             mergeSort($arr, $mid +1, $end);
    12             
    13             #合并数组
    14             $tempArr = array();
    15             $leftInx = $from;
    16             $rightInx = $mid + 1;
    17             
    18             #合并左右两部,直到左边或右边部分全部排入临时数组
    19             while($leftInx <= $mid && $rightInx <= $end) {
    20                 if($arr[$leftInx] < $arr[$rightInx]) {
    21                     $tempArr[] = $arr[$leftInx++];
    22                 } else {
    23                     $tempArr[] = $arr[$rightInx++];
    24                 }
    25             }
    26             
    27             #处理没有排完的一部分的剩下元素,因为待合并的部分是有序数组,剩下的元素直接全部加入临时数组
    28             while($leftInx <= $mid) {
    29                 $tempArr[] = $arr[$leftInx++];
    30             }
    31             
    32             while($rightInx <= $end) {
    33                 $tempArr[] = $arr[$rightInx++];
    34             }
    35             
    36             #用临时数组的值替换掉原数组的值
    37             array_splice($arr, $from, $end - $from + 1, $tempArr);
    38         }
    39     }
    40     
    41     $arr = array(1, 1, 5, 7, 2, 4, 3, 6, 3, 0);
    42     mergeSort($arr, 0, count($arr) - 1);
    43     print_r($arr);
    44 ?>

    输出

    Array ( [0] => 0 [1] => 1 [2] => 1 [3] => 2 [4] => 3 [5] => 3 [6] => 4 [7] => 5 [8] => 6 [9] => 7 )

  • 相关阅读:
    LVM
    Linux 压缩归档
    <基础> PHP 字符串操作
    <基础> PHP 数组操作
    PHP 文件操作类(转载)
    Linux 磁盘管理(分区、创建文件系统、挂载)
    文件系统(File System)
    Linux 硬链接、软链接
    Django基础一
    数据库约束
  • 原文地址:https://www.cnblogs.com/zemliu/p/2648399.html
Copyright © 2011-2022 走看看