main
1class Heap
2 def initialize(items = [], sorting = QuickSort.new)
3 @items = sorting.sort(items.map { |x| Node.new(x, x) })
4 @sort_strategy = sorting
5 end
6
7 def insert(key, value=key)
8 node = Node.new(key, value)
9 @items.push(node)
10 @items = @sort_strategy.sort(@items)
11 end
12
13 def min
14 item = @items.shift
15 item.value if item
16 end
17
18 def max
19 item = @items.pop
20 item.value if item
21 end
22
23 def empty?
24 @items.empty?
25 end
26
27 def self.heapify(items)
28 Heap.new(items)
29 end
30
31 alias_method :push, :insert
32
33 class Node
34 attr_reader :key, :value
35
36 def initialize(key, value)
37 @key = key
38 @value = value
39 end
40
41 def <=>(other_key)
42 other_key <=> @key
43 end
44 end
45end