这是我被击中的面试问题之一
问题: 给定一个正负整数数组,您需要将正数移到一侧,将负数移到另一侧,并且顺序不变。前任。{-1,5,3,-8,4,-6,9} 到 {-1,-8,-6,5,3,4,9}。这应该在 O(n) 中完成,并且不需要额外的 array 。
首先我想通过快速排序来做到这一点
伪代码
找到最接近零的元素。使其成为枢轴元素。然后在数组上应用一次快速排序。这是 O(n) 。
唉! 但是快速排序不是稳定排序?
之后我提出了以下解决方案
伪代码:
最初,增加电流直到第一个 +ve 数字和减量结束直到最后一个 -ve 数字
如果 current 为负,则增加 current 如果 current 为正,则将其与 end 的元素交换并减少 current 和 end 如果 current >= end ,则中断。
仍然没有得到正确的答案。需要这方面的建议