重新排列阵列正负两侧

时间:2012-07-14 02:42:07

标签: arrays algorithm

给定一组正负整数,将一侧的所有正整数和一侧的负整数组合在一起。数字应与它们出现的顺序相同。

示例:

数组= {1,-3,-5,9,-8}

O / P = {-3,-5,-8,1,9}

我不认为使用额外的空间对这个问题很有挑战性,因为你可以简单地循环并填充新数组。挑战是在不使用额外空间的情况下进行。我的朋友问了这个问题。

(我正在考虑用2个指针解决它并交换正面负面等但很快就会出现元素出现的相对排序似乎搞砸了)

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

这感觉就像是家庭作业,所以我会给你一个提示。

申请stable sort

  

稳定的排序算法使用相同的键维护记录的相对顺序。

作为您的平等测试,请勿使用该数字的实际值。相反,请考虑任何等于任何其他正数的正数,以及任何等于任何其他负数的负数。

答案 1 :(得分:-1)

这可以是O(n)。以下是python中的示例代码。快速使用Pivot可以解决此问题。解决方案看起来像这样-

def one_side_arrange(self, arr):
    i = -1
    for j in range(len(arr)):
        if (arr[j] < 0):
            i += 1
            arr[i], arr[j] = arr[j], arr[i]
    return arr

输入Arr = [1,2,3,-1,2,-3,3,4,-3,-5] 输出= [-1,-3,-3,-5、2、2、3、4、3、1]