这是一道面试题,我被卡住了。
问题:给定一个包含正数和负数的整数数组,需要将正数移到一侧,将负数移到另一侧,并保持原有顺序。例如,{-1,5,3,-8,4,-6,9} 变为 {-1,-8,-6,5,3,4,9}。要求时间复杂度为 O(n),且不能使用额外的数组。
首先,我考虑使用快速排序来解决此问题,伪代码如下:
找到距离零最近的元素作为枢轴元素,然后对数组应用一次快速排序,这样可以在 O(n) 的时间内完成。
但是,快速排序不是稳定排序算法。
之后,我想出了以下解决方案。
伪代码如下:
初始时,将 current 递增到第一个正数,将 end 递减到最后一个负数。
如果当前元素为负数,将其加1。 如果当前元素为正数,将其与末尾位置的元素交换,同时将当前位置和末尾位置均减1。 如果当前位置大于等于末尾位置,则结束循环。
仍未得到正确答案。需要对此提出建议。
问题:给定一个包含正数和负数的整数数组,需要将正数移到一侧,将负数移到另一侧,并保持原有顺序。例如,{-1,5,3,-8,4,-6,9} 变为 {-1,-8,-6,5,3,4,9}。要求时间复杂度为 O(n),且不能使用额外的数组。
首先,我考虑使用快速排序来解决此问题,伪代码如下:
找到距离零最近的元素作为枢轴元素,然后对数组应用一次快速排序,这样可以在 O(n) 的时间内完成。
但是,快速排序不是稳定排序算法。
之后,我想出了以下解决方案。
伪代码如下:
初始时,将 current 递增到第一个正数,将 end 递减到最后一个负数。
如果当前元素为负数,将其加1。 如果当前元素为正数,将其与末尾位置的元素交换,同时将当前位置和末尾位置均减1。 如果当前位置大于等于末尾位置,则结束循环。
仍未得到正确答案。需要对此提出建议。