-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsorting.rb
executable file
·70 lines (61 loc) · 1.55 KB
/
sorting.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/env ruby
require 'ascii_charts'
require 'pp'
def generate_set(size)
(1..size).map { |e| rand 100000000 }
end
def swap!(set, i, j)
temp = set[i]
set[i] = set[j]
set[j] = temp
end
def insert_sort!(set)
(0..set.size - 1).each do |i|
(i..set.size - 1).each do |j|
if set[j] < set[i]
swap!(set, i, j)
end
end
end
end
def selection_sort!(set)
(0..set.size - 1).each do |i|
min_index = i
(i..set.size - 1).each do |j|
if set[j] < set[min_index]
min_index = j
end
swap!(set, i, min_index)
end
end
end
def run_sorts(sort_algo)
sizes = [10, 100, 1000, 10_000, 100_000, 1_000_000] #, 100_000_000, 100_000_000_000]
sized_sets = sizes.map { |s|
puts "Generating set of size #{s}"
generate_set(s)
}
results = sized_sets.map { |set|
puts("Sorting set of size #{set.size}")
start_time = Time.now
if sort_algo == "insert" then
insert_sort!(set)
elsif sort_algo == "selection" then
selection_sort!(set)
else
raise "Unknown sort algorithm #{sort_algo}"
end
end_time = Time.now
[set.size, end_time.to_f - start_time.to_f]
}
end
["insert", "selection"].each { |algo|
puts "Sorting: #{algo}"
result_times = run_sorts(sort_algo=algo)
pp result_times
puts AsciiCharts::Cartesian.new(result_times).draw
}
#set = generate_set(100)
#insert_sort!(set)
#selection_sort!(set)
#puts(set)