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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dc6da324d5e82ea3fc7e86f3c1867c4bfb71fffde7f40c61adc91993bf814793
4
- data.tar.gz: f029598b6363d8d10f6b0b561cf03d3570d4e7d8d69dcf340802dda72b89a2a7
3
+ metadata.gz: 83e398190ca963503253e1d4ec1d0e22527bb349a1504a714b419da2a20b1923
4
+ data.tar.gz: 752909790d11f1af4c2ae5cde6933ba5c1f4a2080c2164a60c7401671df150bd
5
5
  SHA512:
6
- metadata.gz: 1277ee60c4cfed9ef92694f114fa8384546d45f6cfafaac3ea736a1d8d36fd9782228f969257c70a80c9d7a56afbb4442b540e12d653f2d992f2ada6f9f76487
7
- data.tar.gz: 690a0f5c5668af181d8fd469fdc7c6a89810e7ee9c4161b9f5fba32537a5a6bcdd2e0f774fe94b6731fe5b658fd2a3e7b8d847a8b3c63bd44cf55d37a94d0a0e
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
- puts "Sorted Array: #{sorter001.array}"
42
- puts "Sorted Array: #{sorter002.array}"
43
- puts "Sorted Array: #{sorter003.array}"
44
- puts "Sorted Array: #{sorter004.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
 
Binary file
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fastsort
4
- VERSION = "0.1.5"
4
+ VERSION = "0.1.6"
5
5
  end
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
- 39, 15, 480, 392, 81, 354, 337, 378, 237, 497, 46, 19, 274, 296, 28,
5
- 376, 456, 261, 444, 151, 403, 308, 102, 410, 113, 357, 141, 316, 74, 387,
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 SelectionSort: #{sorter_005.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.5
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-03 00:00:00.000000000 Z
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