标签 PHP 下的文章

排序

(图片来自互联网)

最近老高复习了下数据结构,此文会慢慢更新!

<?php

$count = 1000;

for($i=0;$i<$count;$i++){
    $random_array[$i] = rand(0,$count);
}


# 空白对照
$start = microtime(1);
echo 'Do nothing takes:' . number_format((microtime(1) - $start), 6);
echo "\n";

# 原生方法排序
$test_array = $random_array;
$start = microtime(1);

sort($test_array);
echo 'Origin sort takes:' . number_format((microtime(1) - $start), 6);
echo "\n";

# 冒泡排序
# 两两交换,思路很简单
$test_array = $random_array;
$start = microtime(1);
# 需要把计算个数的时间也考虑到
$count = count($test_array);
# 循环n-1次
for($i=1;$i<$count;$i++){
    # 循环n-1-$i次
    for($j=0;$j<$count-$i;$j++){
        if($test_array[$j] > $test_array[$j+1]){
            $tmp = $test_array[$j];
            $test_array[$j] = $test_array[$j+1];
            $test_array[$j+1] = $tmp;
        }
    }
}
echo 'Bubble sort takes:' . number_format((microtime(1) - $start), 6);
echo "\n";

# 选择排序
# 依次选择最小(大)的元素,等选择完毕自动有序
$test_array = $random_array;
$start = microtime(1);
$count = count($test_array);

for($i=0;$i<$count-1;$i++){
    # $test_array[$i]为当前最小
    for($j=$i+1;$j<$count;$j++){
        # 从下一个开始比较
        if($test_array[$i] > $test_array[$j]){
            $tmp = $test_array[$j];
            $test_array[$j] = $test_array[$i];
            $test_array[$i] = $tmp;
        }
    }
}
echo 'Select sort takes:' . number_format((microtime(1) - $start), 6);
echo "\n";


# 插入排序
# 就像别人给你发扑克牌,拿到一张牌就插到你手上,并使之有序
$test_array = $random_array;
$start = microtime(1);
$count = count($test_array);
# 直接跳过$i=0
for($i=1;$i<$count;$i++){
    # 取$i左边的元素先比,比到最左
    for($j=$i-1;$j>=0;$j--){
        # 共$j+1个元素,其中前$j个有序
        if($test_array[$j] > $test_array[$j+1]){
            $tmp = $test_array[$j];
            $test_array[$j] = $test_array[$j+1];
            $test_array[$j+1] = $tmp;
        }else{
            break;
        }
    }
}

echo 'Insertion sort takes:' . number_format((microtime(1) - $start), 6);
echo "\n";


# 快速排序
# 有点递归的思想,随机一个基准,将集合分为两半,然后继续分解,直到元素个数为1或0个
$test_array = $random_array;
$start = microtime(1);

function quick_sort($arr){
    $len = count($arr);
    # 符合条件<=1即无需分组
    if($len <= 1) return $arr;

    # floor也行,主要是取整
    $index = ceil($len/2);
    $base = $arr[$index];

    $left = array();
    $right = array();

    for($i=0;$i<$len;$i++){
        if($i == $index) continue;
        if($arr[$i] < $base){
            $left[] = $arr[$i];
        }else{
            $right[] = $arr[$i];
        }
    }

    $l = quick_sort($left);
    $r = quick_sort($right);
    return array_merge($l, (array)$base, $r);
}

quick_sort($test_array);
echo 'Quick sort takes:' . number_format((microtime(1) - $start), 6);
echo "\n";

- 阅读剩余部分 -

EPEL全称Extra Packages for Enterprise Linux,官方翻译为 企业版 Linux 附加软件包。顾名思义,他可以扩充你的软件库,安装很多软件时能省去很多时间。比如最近很火的PHP的DoS漏洞,Bug 61461,在EPEL下面只需要一条命令就能将PHP升级为5.9,避免重新编。

老高推荐新安装的centos系统都先安装此附加软件包!

安装命令:

yum install epel-release

没有报错的话,那么EPEL就安装完毕了。

如果上述命令还是解决不了问题,那就必须有针对性的安装了。

以下命令复制自Install EPEL and additional repositories on CentOS and Red Hat

#CentOS and Red Hat Enterprise Linux 5.x

wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
rpm -Uvh epel-release-5*.rpm

#CentOS and Red Hat Enterprise Linux 6.x

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6*.rpm

#CentOS and Red Hat Enterprise Linux 7.x

wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
rpm -Uvh epel-release-7*.rpm

你还可以在此查看每个系统对应的最新的EPEL版本