Skip to content

Instantly share code, notes, and snippets.

@woodRock
Created September 17, 2018 13:09
Show Gist options
  • Save woodRock/691d12796fcaadcfabfb1e88c8473ed2 to your computer and use it in GitHub Desktop.
Save woodRock/691d12796fcaadcfabfb1e88c8473ed2 to your computer and use it in GitHub Desktop.
def medians(stream)
smaller, greater = Array.new, Array.new
med = stream[0]
smaller << stream[0]
puts med
for i in 1...stream.length
current = stream[i]
if smaller.size() > greater.size()
if current < med
greater << smaller[-1]
smaller.pop()
smaller << current
else
greater << current
end
smaller = smaller.sort { |a,b| a <=> b }
greater = greater.sort { |a,b| b <=> a }
med = (smaller[-1] + greater[-1])/2.0;
elsif smaller.size() == greater.size()
if current < med
smaller << current
smaller = smaller.sort { |a,b| a <=> b }
med = smaller[-1]
else
greater << current
greater = greater.sort { |a,b| b <=> a }
med = greater[-1]
end
else
if current > med
smaller << greater[-1]
greater.pop()
greater << current
else
smaller << current
end
smaller = smaller.sort { |a,b| a <=> b }
greater = greater.sort { |a,b| b <=> a }
med = (smaller[-1] + greater[-1])/2.0;
end
puts med
end
end
stream = [1,2,3,4,5,6,7,8,9,10,11]
medians(stream)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment