题目(《算法导论》P23):给出一个运行时间为nlgn的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素。
思路:(1)排序(nlgn) (2)遍历(n)
代码:快速排序代码引自http://zh.wikipedia.org/zh-tw/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F
def quick_sort(array)
return array if array.size < 2
left, right = array[1..-1].partition { |y| y <= array.first }
quick_sort(left) + [ array.first ] + quick_sort(right)
end
s=[23,43,4,5]
def find_sum(x,array)
s=quick_sort(array);
i=0;
j=array.size-1;
while i<j do
key=s[i]+s[j]
return [s[i],s[j]] if(key==x)
if key<x
i=i+1
else
j=j-1
end
end
return "null"
end
p find_sum(47,s)