将数组的绝对值排序为小于O(n ^ 2)JAVA

时间:2014-07-08 20:19:32

标签: java arrays algorithm sorting

给定正数和负数的排序数组(例如:-9,-7,-4,-0.9,1,2,3,8)我需要按照它们的排序顺序输出数组中的元素绝对值小于O(N ^ 2)而不使用任何内置函数。

有没有人知道这个简单问题的任何可接受的解决方案? 我正在考虑修改quicksort算法,使其检查元素的abs值。

3 个答案:

答案 0 :(得分:3)

我将二进制搜索0,从概念上将列表拆分为2个部分,并将两个列表(负值1作为其自身的正值)合并为一个新的列表,通过反向行走负数和正向前行

O(log n)用于二进制搜索,O(n)用于合并2个排序列表。

答案 1 :(得分:1)

  • 选择您喜欢的任何双向比较排序算法,运行时界限小于O(N ^ 2)。 Quicksort是一个有效的选择。
  • 进行比较时(将显示在双向比较排序算法中),而不是比较值ab比较abs(a)abs(b)。只需确保不要将ab替换为abs(a)abs(b),只需在做同事时使用后两者

答案 2 :(得分:0)

在数组的末尾只有两个指针,然后将绝对值与结束进行比较。

start == array[0]
end == array.length

while start != end

  if abs(start) => end
    put start in front of end
    start++
    end--
  else
    end--

我可能会遗漏一些碎片,但这就是想法。

0(n) solution.