为什么cmp_function of usort需要这么多限制?

时间:2011-09-06 11:54:56

标签: php sorting

引自here

  

比较函数必须返回小于,等于或的整数   如果第一个参数被认为是大于零   分别小于,等于或大于第二个。

在我看来,如果第一个大于第二个,cmp_function只需要返回1

为什么需要所有3个案例?

更新

function bubble($list)
{
    $length = count($list) - 2;
    $sorted = false;

    while(!$sorted)
    {
        $sorted = true;
        foreach(range(0,$length) as $i)
        {
            if($list[$i] > $list[$i + 1])
            {
                $sorted = false;
                list($list[$i],$list[$i + 1]) = array($list[$i + 1],$list[$i]);
            }
        }
    }
    return $list;
}

2 个答案:

答案 0 :(得分:2)

这样可以区分<==>

这类似于回调的要求,例如: C qsort(据我所知,usort可以在内部使用qsort实现。

可以编写一个只需要两值谓词的搜索例程,但usort恰好不是其中之一。

答案 1 :(得分:1)

事实上,你几乎是对的,你不需要3个不同的值。

但是,1个单值是不够的,需要2个值:

  • 1(真)&lt; =&gt;第一个&gt;第二
  • 0(假)&lt; =&gt;第一个&lt; =第二个