fastsort 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|