对整数数组进行排序,前面是负整数,后面是正整数

时间:2015-08-20 04:00:15

标签: php arrays sorting

我得到了这样一个数组:

$input = array(-1,1,3,-2,2, 3,4,-4);

我需要对它进行排序,使得负整数位于前面,正整数位于后面,并且相对位置不应该改变。所以输出应该是:

$output = array(-1 ,-2,-4, 1,3,2,3,4);

我使用usort尝试过此操作,但我无法保留相对位置。

function cmp ($a, $b)
{
    return $a - $b;
}
usort($input, "cmp");
echo '<pre>', print_r($input), '</pre>';

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

2 个答案:

答案 0 :(得分:5)

试试这个..

$arr = array(-1,1,3,-2,2, 3,4,-4);


$positive = array_filter($arr, function($x) { return $x > 0; });
$negative = array_filter($arr, function($x) { return $x < 0; });

sort($positive);
rsort($negative);

$sorted = array_merge($negative,$positive);
print_r($sorted);

演示:https://eval.in/419320

输出:

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

答案 1 :(得分:3)

这是订购问题,但它不是排序

问题可以分解如下:

  1. 将给定数组分成两个数组;一个是负数,另一个是正数。 (应该考虑你想要的地方0。)每个数组中项目的顺序应该与它们在输入数组中出现的顺序相同。

    通过push值来执行此操作,例如。

  2. 连接两个数组。