今天面试被问到一个问题。问题是这样的:“一个数组里面有正整数和负整数,对这个数组进行排序,要求,距离100比较近的排在前面。比如102距离100为2,90距离100为10,所以102排在90前面。”

这个算法很简单,下面直接给出我的程序:


function cmp($a, $b)
{
    $ta = abs(100-$a);
    $tb = abs(100-$b);
    if ($ta == $tb) {
        return 0;
    }
    return ($ta < $tb) ? -1 : 1;
}

$origin = array(
    100,0,-10,-20,-30,10,30,50,80,90,102,98
);

usort($origin, "cmp");

foreach ($origin as $key => $value) {
    echo "{$key}=>{$value}<br/>";
}

打印结果如下:


0=>100
1=>102
2=>98
3=>90
4=>120
5=>80
6=>130
7=>50
8=>30
9=>10
10=>0
11=>-10
12=>-20
13=>-30