fastsort 0.1.5 → 0.1.6
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.
- checksums.yaml +4 -4
- data/README.md +16 -5
- data/fastsort-0.1.5.gem +0 -0
- data/lib/fastsort/version.rb +1 -1
- data/lib/fastsort.rb +100 -0
- data/main.rb +15 -40
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83e398190ca963503253e1d4ec1d0e22527bb349a1504a714b419da2a20b1923
|
4
|
+
data.tar.gz: 752909790d11f1af4c2ae5cde6933ba5c1f4a2080c2164a60c7401671df150bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6cb3d695626d2d909423a2d09d1f5409bcaa8c7559593c82fca5093308642cf7a7d2c045032bc97c5bd89f016739b23f69455902b51b6b93b646e5d757477cd0
|
7
|
+
data.tar.gz: bc46f65b76cbf47cecc3e9336d8bb7bc72ac01dcb7f3aa783922be84612b10b6a415fccb8611e0ba349fac46a6c9dfae6e123b2cbb5d6b6285f4ed79082c0fed
|
data/README.md
CHANGED
@@ -28,20 +28,31 @@ arr = [
|
|
28
28
|
38, 87, 31, 93, 60, 53, 39, 59, 67, 97
|
29
29
|
]
|
30
30
|
|
31
|
+
bucket_size = 10
|
32
|
+
|
31
33
|
sorter001 = Fastsort::Quicksort.new(arr)
|
32
34
|
sorter002 = Fastsort::Mergesort.new(arr)
|
33
35
|
sorter003 = Fastsort::Sonicsort.new(arr)
|
34
36
|
sorter004 = Fastsort::SelectionSort.new(arr)
|
37
|
+
sorter004 = Fastsort::BubbleSort.new(arr)
|
38
|
+
sorter006 = Fastsort::BucketSort.new(arr, bucket_size)
|
39
|
+
sorter007 = Fastsort::InsertionSort.new(arr)
|
35
40
|
|
36
41
|
sorter001.sort_array
|
37
42
|
sorter002.sort_array
|
38
43
|
sorter003.sort_quick_and_merge
|
39
44
|
sorter004.sort_array
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
puts "Sorted Array: #{
|
45
|
+
sorter005.sort_array
|
46
|
+
sorter006.sort_array
|
47
|
+
sorter007.sort_array
|
48
|
+
|
49
|
+
puts "Sorted Array Quicksort: #{sorter_001.array}"
|
50
|
+
puts "Sorted Array Mergesort: #{sorter_002.array}"
|
51
|
+
puts "Sorted Array Sonicsort: #{sorter_003.array}"
|
52
|
+
puts "Sorted Array SelectionSort: #{sorter_004.array}"
|
53
|
+
puts "Sorted Array BubbleSort: #{sorter_005.array}"
|
54
|
+
puts "Sorted Array BucketSort: #{sorter_006.array}"
|
55
|
+
puts "Sorted Array InsertionSort: #{sorter_007.array}"
|
45
56
|
|
46
57
|
|
47
58
|
|
data/fastsort-0.1.5.gem
ADDED
Binary file
|
data/lib/fastsort/version.rb
CHANGED
data/lib/fastsort.rb
CHANGED
@@ -218,4 +218,104 @@ module Fastsort
|
|
218
218
|
end
|
219
219
|
end
|
220
220
|
end
|
221
|
+
|
222
|
+
class BucketSort
|
223
|
+
attr_accessor :array, :bucket_size
|
224
|
+
|
225
|
+
def initialize(array, bucket_size)
|
226
|
+
raise ArgumentError, "Array cannot be nil" if array.nil?
|
227
|
+
@bucket_size = bucket_size
|
228
|
+
@array = array
|
229
|
+
end
|
230
|
+
|
231
|
+
def sort_array
|
232
|
+
raise ArgumentError, "Array cannot be empty" if array.empty?
|
233
|
+
bucket_sort(array, bucket_size)
|
234
|
+
end
|
235
|
+
|
236
|
+
def insertion_sort(array)
|
237
|
+
i = 0
|
238
|
+
while i < array.length - 1
|
239
|
+
j = i
|
240
|
+
while j >= 0
|
241
|
+
if array[j] > array[j + 1]
|
242
|
+
temp = array[j]
|
243
|
+
array[j] = array[j + 1]
|
244
|
+
array[j + 1] = temp
|
245
|
+
end
|
246
|
+
j -= 1
|
247
|
+
end
|
248
|
+
i += 1
|
249
|
+
end
|
250
|
+
return array
|
251
|
+
end
|
252
|
+
|
253
|
+
def bucket_sort(array, bucket_size = 5)
|
254
|
+
if array.empty? || array.length == 1
|
255
|
+
return array
|
256
|
+
end
|
257
|
+
|
258
|
+
min_value = array[0]
|
259
|
+
max_value = array[0]
|
260
|
+
|
261
|
+
array.each do |item|
|
262
|
+
if item < min_value
|
263
|
+
min_value = item
|
264
|
+
elsif item > max_value
|
265
|
+
max_value = item
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
bucket_count = ((max_value - min_value) / bucket_size).floor + 1
|
270
|
+
bucket_array = Array.new(bucket_count)
|
271
|
+
|
272
|
+
(0..bucket_array.length - 1).each do |i|
|
273
|
+
bucket_array[i] = []
|
274
|
+
end
|
275
|
+
|
276
|
+
array.each do |item|
|
277
|
+
bucket_array[((item - min_value) / bucket_size).floor] << item
|
278
|
+
end
|
279
|
+
|
280
|
+
sorted_array = []
|
281
|
+
|
282
|
+
bucket_array.each do |bucket|
|
283
|
+
new = insertion_sort(bucket)
|
284
|
+
sorted_array.concat(new)
|
285
|
+
end
|
286
|
+
|
287
|
+
return sorted_array
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
class InsertionSort
|
292
|
+
attr_accessor :array
|
293
|
+
|
294
|
+
def initialize(array)
|
295
|
+
raise ArgumentError, "Array cannot be nil" if array.nil?
|
296
|
+
@array = array
|
297
|
+
end
|
298
|
+
|
299
|
+
def sort_array
|
300
|
+
raise ArgumentError, "Array cannot be empty" if array.empty?
|
301
|
+
insertion_sort(array)
|
302
|
+
end
|
303
|
+
|
304
|
+
def insertion_sort(arr)
|
305
|
+
i = 0
|
306
|
+
while i < arr.length - 1
|
307
|
+
j = i
|
308
|
+
while j >= 0
|
309
|
+
if arr[j] > arr[j + 1]
|
310
|
+
temp = arr[j]
|
311
|
+
arr[j] = arr[j + 1]
|
312
|
+
arr[j + 1] = temp
|
313
|
+
end
|
314
|
+
j -= 1
|
315
|
+
end
|
316
|
+
i += 1
|
317
|
+
end
|
318
|
+
return arr
|
319
|
+
end
|
320
|
+
end
|
221
321
|
end
|
data/main.rb
CHANGED
@@ -1,54 +1,29 @@
|
|
1
1
|
require_relative "./lib/fastsort"
|
2
2
|
|
3
|
-
arr = [
|
4
|
-
|
5
|
-
|
6
|
-
137, 235, 184, 212, 85, 217, 445, 79, 439, 147, 385, 121, 3, 482, 311,
|
7
|
-
188, 495, 172, 204, 349, 187, 216, 486, 500, 230, 209, 21, 336, 14, 43,
|
8
|
-
468, 432, 298, 452, 107, 450, 275, 271, 418, 284, 58, 281, 33, 163, 412,
|
9
|
-
200, 464, 415, 247, 87, 214, 397, 270, 48, 268, 301, 417, 285, 484, 467,
|
10
|
-
51, 303, 490, 341, 16, 250, 10, 390, 407, 114, 243, 364, 355, 227, 223,
|
11
|
-
54, 353, 408, 40, 155, 455, 282, 159, 166, 441, 479, 346, 171, 197, 148,
|
12
|
-
34, 383, 101, 248, 287, 286, 414, 88, 278, 347, 180, 305, 105, 210, 477,
|
13
|
-
324, 332, 457, 122, 12, 377, 176, 406, 433, 95, 312, 198, 426, 323, 474,
|
14
|
-
273, 319, 143, 288, 111, 371, 42, 276, 279, 466, 351, 36, 118, 195, 335,
|
15
|
-
225, 226, 420, 59, 338, 396, 320, 361, 199, 156, 116, 401, 183, 469, 134,
|
16
|
-
241, 249, 164, 49, 146, 8, 437, 402, 186, 221, 173, 233, 462, 232, 253,
|
17
|
-
428, 391, 53, 11, 443, 394, 252, 98, 485, 196, 32, 60, 25, 129, 423,
|
18
|
-
297, 472, 66, 367, 110, 307, 80, 429, 30, 470, 321, 290, 368, 475, 37,
|
19
|
-
218, 61, 7, 175, 86, 152, 90, 55, 306, 348, 84, 63, 133, 29, 379,
|
20
|
-
263, 393, 65, 372, 427, 191, 157, 202, 31, 89, 262, 375, 64, 496, 24,
|
21
|
-
300, 234, 389, 131, 140, 365, 236, 395, 295, 72, 494, 435, 499, 483, 388,
|
22
|
-
100, 340, 96, 224, 405, 219, 453, 309, 266, 22, 206, 239, 75, 91, 330,
|
23
|
-
70, 358, 194, 478, 104, 352, 77, 109, 449, 23, 154, 374, 491, 257, 126,
|
24
|
-
422, 26, 119, 62, 192, 292, 493, 460, 265, 313, 471, 386, 179, 447, 343,
|
25
|
-
381, 127, 165, 400, 315, 327, 128, 366, 57, 299, 434, 463, 329, 255, 359,
|
26
|
-
83, 258, 310, 360, 38, 404, 231, 20, 424, 207, 161, 325, 260, 442, 17,
|
27
|
-
244, 246, 103, 451, 242, 318, 106, 44, 419, 6, 4, 35, 213, 18, 293,
|
28
|
-
132, 380, 454, 291, 283, 162, 384, 136, 362, 123, 458, 92, 373, 150, 9,
|
29
|
-
448, 481, 99, 125, 120, 302, 93, 459, 160, 398, 425, 182, 174, 189, 78,
|
30
|
-
145, 135, 193, 149, 228, 256, 1, 344, 68, 5, 178, 177, 208, 326, 473,
|
31
|
-
185, 322, 245, 289, 2, 267, 82, 205, 169, 269, 71, 238, 416, 56, 446,
|
32
|
-
280, 488, 411, 363, 436, 41, 356, 399, 304, 229, 254, 430, 259, 203, 201,
|
33
|
-
115, 350, 370, 124, 382, 421, 498, 139, 345, 438, 69, 431, 27, 317, 215,
|
34
|
-
47, 67, 251, 272, 144, 333, 220, 168, 465, 328, 130, 170, 294, 167, 52,
|
35
|
-
409, 117, 487, 138, 461, 489,
|
36
|
-
]
|
3
|
+
arr = [1, 100, 20, 30, 12, 7, 6, 10]
|
4
|
+
|
5
|
+
bucket_size = 2
|
37
6
|
|
38
7
|
sorter_001 = Fastsort::Quicksort.new(arr)
|
39
8
|
sorter_002 = Fastsort::Mergesort.new(arr)
|
40
9
|
sorter_003 = Fastsort::Sonicsort.new(arr)
|
41
10
|
sorter_004 = Fastsort::SelectionSort.new(arr)
|
42
11
|
sorter_005 = Fastsort::BubbleSort.new(arr)
|
12
|
+
sorter_006 = Fastsort::BucketSort.new(arr, bucket_size)
|
13
|
+
sorter_007 = Fastsort::InsertionSort.new(arr)
|
43
14
|
|
44
|
-
sorter_001.sort_array
|
45
|
-
sorter_002.sort_array
|
46
|
-
sorter_003.sort_quick_and_merge
|
47
|
-
sorter_004.sort_array
|
48
|
-
sorter_005.sort_array
|
15
|
+
# sorter_001.sort_array
|
16
|
+
# sorter_002.sort_array
|
17
|
+
# sorter_003.sort_quick_and_merge
|
18
|
+
# sorter_004.sort_array
|
19
|
+
# sorter_005.sort_array
|
20
|
+
sorter_006.sort_array
|
21
|
+
sorter_007.sort_array
|
49
22
|
|
50
23
|
# puts "Sorted Array Quicksort: #{sorter_001.array}"
|
51
24
|
# puts "Sorted Array Mergesort: #{sorter_002.array}"
|
52
25
|
# puts "Sorted Array Sonicsort: #{sorter_003.array}"
|
53
26
|
# puts "Sorted Array SelectionSort: #{sorter_004.array}"
|
54
|
-
puts "Sorted Array
|
27
|
+
# puts "Sorted Array BubbleSort: #{sorter_005.array}"
|
28
|
+
puts "Sorted Array BucketSort: #{sorter_006.array}"
|
29
|
+
puts "Sorted Array InsertionSort: #{sorter_007.array}"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastsort
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dants0
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-01-
|
11
|
+
date: 2024-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Designed to efficiently organize the elements of an array in a specific
|
14
14
|
order. Sorting is a fundamental operation in computer science and data processing,
|
@@ -26,6 +26,7 @@ files:
|
|
26
26
|
- fastsort-0.1.2.gem
|
27
27
|
- fastsort-0.1.3.gem
|
28
28
|
- fastsort-0.1.4.gem
|
29
|
+
- fastsort-0.1.5.gem
|
29
30
|
- fastsort.gemspec
|
30
31
|
- lib/fastsort.rb
|
31
32
|
- lib/fastsort/version.rb
|