给定正数和负数的排序数组(例如:-9,-7,-4,-0.9,1,2,3,8)我需要按照它们的排序顺序输出数组中的元素绝对值小于O(N ^ 2)而不使用任何内置函数。
有没有人知道这个简单问题的任何可接受的解决方案? 我正在考虑修改quicksort算法,使其检查元素的abs值。
答案 0 :(得分:3)
我将二进制搜索0,从概念上将列表拆分为2个部分,并将两个列表(负值1作为其自身的正值)合并为一个新的列表,通过反向行走负数和正向前行
O(log n)用于二进制搜索,O(n)用于合并2个排序列表。
答案 1 :(得分:1)
a
和b
比较abs(a)
和abs(b)
。只需确保不要将a
和b
替换为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.