compare-sort 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/compare-sort.rb +182 -0
  3. metadata +44 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c91aefa1ba77dbbf0e014fbc3298eee1aa06d4c3
4
+ data.tar.gz: eb210a91422c7b200339347e0fc90f69b8ce4844
5
+ SHA512:
6
+ metadata.gz: a4cb697367a54ab5f93d608a39ac13dd167bb809f5007a5e80f42b7294ccb235af527c3ba38121a5f68dc9003dbcfba7fda29c434748524d070eccd37a1da0e8
7
+ data.tar.gz: 2cd111d1c56dcd942081472f114461cd106fa1b77ef012719d645ae7f33baa0eb489ca7135115d45c251358ae8f406d55f969b75c20fd1d52e411c282b940c8b
@@ -0,0 +1,182 @@
1
+ class CompareSort
2
+ def self.run(info)
3
+ data = info[:data]
4
+ sorting_method = info[:sorting_method]
5
+ timer = info[:timer]
6
+
7
+ ValidateData.run(data)
8
+
9
+ if timer
10
+ sort = lambda { eval(sorting_method).run(data) }
11
+ return self.timer(sort)
12
+ else
13
+ return eval(sorting_method).run(data)
14
+ end
15
+
16
+ end
17
+
18
+ def self.timer(sorting_method)
19
+ start_time = Time.now
20
+ sorted_list = sorting_method.call
21
+ end_time = Time.now
22
+
23
+ return end_time - start_time
24
+ end
25
+
26
+ def self.compare_all(info)
27
+ data = info[:data]
28
+ view = info[:view]
29
+
30
+ sorting_methods = %w(SelectionSort BubbleSort ModifiedBubbleSort InsertionSort)
31
+ sorting_times = {}
32
+
33
+ sorting_methods.each do |method|
34
+ info = { data: data, sorting_method: method, timer: true }
35
+ sorting_times[method] = self.run(info)
36
+ end
37
+
38
+ if view
39
+ View.compare_all(sorting_times.sort_by{|method, time| time})
40
+ end
41
+
42
+ return sorting_times
43
+
44
+ end
45
+ end
46
+
47
+ class View
48
+ def self.compare_all(data)
49
+ puts ""
50
+ print "SORTING METHOD"
51
+ print " "*(6)
52
+ puts "SECONDS"
53
+ puts "-"*27
54
+ data.each do |datum|
55
+ print datum[0]
56
+ print " "*(20-datum[0].length)
57
+ puts datum[1]
58
+ end
59
+ puts ""
60
+ end
61
+ end
62
+
63
+ class ValidateData
64
+
65
+ def self.run(data)
66
+ @data = data
67
+ self.isArray
68
+ self.valuesAreConsistent
69
+ end
70
+
71
+ def self.isArray
72
+ raise "Data must be an array" if (!@data.is_a?(Array))
73
+ end
74
+
75
+ def self.valuesAreConsistent
76
+ if @data[0].is_a?(String)
77
+ valuesAreStrings
78
+ else
79
+ valuesAreNumbers
80
+ end
81
+ end
82
+
83
+ def self.valuesAreNumbers
84
+ @data.each do |datum|
85
+ if (!datum.is_a?(Fixnum) && !datum.is_a?(Float))
86
+ raise "Values in array must be all numbers OR all strings"
87
+ end
88
+ end
89
+ end
90
+
91
+ def self.valuesAreStrings
92
+ @data.each do |datum|
93
+ if (!datum.is_a?(String))
94
+ raise "Values in array must be all numbers OR all strings"
95
+ end
96
+ end
97
+ end
98
+ end
99
+
100
+
101
+ class InsertionSort
102
+ def self.run(data)
103
+
104
+ # iterate through each element
105
+ data.each_with_index do |unsorted_num, i|
106
+ data[0..i].each_with_index do |sorted_num, j|
107
+
108
+ if sorted_num > unsorted_num
109
+ # insert to its new spot
110
+ data.insert(j, unsorted_num)
111
+ # delete it from old spot
112
+ data.delete_at(i+1)
113
+ break
114
+ end
115
+
116
+ end
117
+ end
118
+ return data
119
+ end
120
+ end
121
+
122
+
123
+ class SelectionSort
124
+ def self.run(data)
125
+ len = data.length
126
+
127
+ # iterate through each element in the array
128
+ for i in 0..len-2
129
+ min_index = i
130
+ # iterate through the rest of the array
131
+ for j in i+1..len-1
132
+ # if min, save index
133
+ min_index = j if data[j] < data[min_index]
134
+ end
135
+ # put the min in it's correct spot
136
+ data[i], data[min_index] = data[min_index], data[i]
137
+ end
138
+
139
+ return data
140
+ end
141
+ end
142
+
143
+
144
+ class ModifiedBubbleSort
145
+ def self.run(data)
146
+ sorted = false
147
+
148
+ while !sorted
149
+ sorted = true
150
+ # iterate through the whole array
151
+ (data.length - 1).times do |i|
152
+ # if the element ahead of the one we are on is smaller
153
+ # then switch them
154
+ if (data[i] > data[i+1])
155
+ data[i+1], data[i] = data[i], data[i+1]
156
+ sorted = false
157
+ end
158
+ end
159
+ end
160
+ return data
161
+ end
162
+ end
163
+
164
+ class BubbleSort
165
+ def self.run(data)
166
+ sorted = false
167
+
168
+ (data.length).times do |i|
169
+ (data.length - 1).times do |j|
170
+
171
+ if (data[j] > data[j+1])
172
+ data[j+1], data[j] = data[j], data[j+1]
173
+ end
174
+ end
175
+ end
176
+
177
+ return data
178
+ end
179
+ end
180
+
181
+
182
+
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: compare-sort
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Amelia Downs
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-14 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A way to compare how long sorting algorithms take on data that you provide
14
+ email: downs.amelia@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/compare-sort.rb
20
+ homepage:
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.4.1
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: Compare sorting algs
44
+ test_files: []