fastsort 0.1.1 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +13 -3
- data/fastsort-0.1.1.gem +0 -0
- data/fastsort-0.1.2.gem +0 -0
- data/lib/fastsort/version.rb +1 -1
- data/lib/fastsort.rb +81 -0
- data/main.rb +37 -8
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c7b13967306e965a337cf00b9b8debca59787d6ee788af65b3242e606507ae2
|
4
|
+
data.tar.gz: 04a5570f6b32a7eea2f18e22e174ef53591e7968ff9b4fe1bc5222148c1f070d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 961c2cc4b1a10d4dbd97408546d02294ffa884a784da0655cc96a4cb74848ff50aa757c71fe3e18ec102e706bce77bd99c14e8d1d34a31af5a2180aae57ec291
|
7
|
+
data.tar.gz: 17ffc5adb2895eb51c53f45512771111be4a9c4f50892fdf63d61e7ed8489b7427d12ef7386ebb46d3b104674ed1ea5894f4a0708038f688e7019b6ea742e767
|
data/README.md
CHANGED
@@ -28,11 +28,21 @@ arr = [
|
|
28
28
|
38, 87, 31, 93, 60, 53, 39, 59, 67, 97
|
29
29
|
]
|
30
30
|
|
31
|
-
|
31
|
+
sorter001 = Fastsort::Quicksort.new(arr)
|
32
|
+
sorter002 = Fastsort::Mergesort.new(arr)
|
33
|
+
sorter003 = Fastsort::Sonicsort.new(arr)
|
34
|
+
|
35
|
+
sorter001.sort_array
|
36
|
+
sorter002.sort_array
|
37
|
+
sorter003.sort_array
|
38
|
+
|
39
|
+
puts "Sorted Array: #{sorter001.array}"
|
40
|
+
puts "Sorted Array: #{sorter002.array}"
|
41
|
+
puts "Sorted Array: #{sorter003.array}"
|
42
|
+
|
43
|
+
|
32
44
|
|
33
|
-
sorter.sort_array
|
34
45
|
|
35
|
-
puts "Sorted Array: #{sorter.array}"
|
36
46
|
```
|
37
47
|
|
38
48
|
## Development
|
data/fastsort-0.1.1.gem
ADDED
Binary file
|
data/fastsort-0.1.2.gem
ADDED
Binary file
|
data/lib/fastsort/version.rb
CHANGED
data/lib/fastsort.rb
CHANGED
@@ -81,4 +81,85 @@ module Fastsort
|
|
81
81
|
result
|
82
82
|
end
|
83
83
|
end
|
84
|
+
|
85
|
+
class Sonicsort
|
86
|
+
attr_accessor :array
|
87
|
+
|
88
|
+
def initialize(array)
|
89
|
+
raise ArgumentError, 'Array cannot be nil' if array.nil?
|
90
|
+
@array = array
|
91
|
+
end
|
92
|
+
|
93
|
+
def sort_quick_and_merge
|
94
|
+
raise ArgumentError, 'Array cannot be empty' if array.empty?
|
95
|
+
quicksort(0, array.length - 1)
|
96
|
+
merge_sort(0, array.length - 1)
|
97
|
+
self
|
98
|
+
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
def quicksort(from_idx, to_idx)
|
103
|
+
return if from_idx >= to_idx
|
104
|
+
|
105
|
+
pivot_idx = quicksort_partition(from_idx, to_idx)
|
106
|
+
|
107
|
+
quicksort(from_idx, pivot_idx - 1)
|
108
|
+
quicksort(pivot_idx + 1, to_idx)
|
109
|
+
end
|
110
|
+
|
111
|
+
def quicksort_partition(from_idx, to_idx)
|
112
|
+
pivot_idx = to_idx
|
113
|
+
pivot_value = array[pivot_idx]
|
114
|
+
|
115
|
+
raise ArgumentError, 'Invalid pivot value' if pivot_value.nil?
|
116
|
+
|
117
|
+
pointer_b_idx = from_idx
|
118
|
+
|
119
|
+
((from_idx...to_idx).to_a).each do |pointer_a_idx|
|
120
|
+
current_value = array[pointer_a_idx]
|
121
|
+
|
122
|
+
next if current_value.nil?
|
123
|
+
|
124
|
+
if current_value <= pivot_value
|
125
|
+
swap_values(pointer_a_idx, pointer_b_idx)
|
126
|
+
pointer_b_idx += 1
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
swap_values(pointer_b_idx, pivot_idx)
|
131
|
+
pointer_b_idx
|
132
|
+
end
|
133
|
+
|
134
|
+
|
135
|
+
def merge_sort(from_idx, to_idx)
|
136
|
+
return if from_idx >= to_idx
|
137
|
+
|
138
|
+
middle_idx = (from_idx + to_idx) / 2
|
139
|
+
|
140
|
+
merge_sort(from_idx, middle_idx)
|
141
|
+
merge_sort(middle_idx + 1, to_idx)
|
142
|
+
merge_subarrays(from_idx, middle_idx, to_idx)
|
143
|
+
end
|
144
|
+
|
145
|
+
def merge_subarrays(from_idx, middle_idx, to_idx)
|
146
|
+
left = array[from_idx..middle_idx]
|
147
|
+
right = array[(middle_idx + 1)..to_idx]
|
148
|
+
|
149
|
+
result = []
|
150
|
+
|
151
|
+
until left.empty? || right.empty?
|
152
|
+
result << (left.first <= right.first ? left.shift : right.shift)
|
153
|
+
end
|
154
|
+
|
155
|
+
result.concat(left).concat(right)
|
156
|
+
|
157
|
+
array[from_idx..to_idx] = result
|
158
|
+
end
|
159
|
+
|
160
|
+
def swap_values(let_idx_a, let_idx_b)
|
161
|
+
array[let_idx_a], array[let_idx_b] = array[let_idx_b], array[let_idx_a]
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
84
165
|
end
|
data/main.rb
CHANGED
@@ -1,18 +1,47 @@
|
|
1
1
|
require_relative "./lib/fastsort"
|
2
2
|
|
3
3
|
arr = [
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
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]
|
10
36
|
|
11
37
|
sorter_001 = Fastsort::Quicksort.new(arr)
|
12
38
|
sorter_002 = Fastsort::Mergesort.new(arr)
|
39
|
+
sorter_003 = Fastsort::Sonicsort.new(arr)
|
13
40
|
|
14
41
|
sorter_001.sort_array
|
15
42
|
sorter_002.sort_array
|
43
|
+
sorter_003.sort_quick_and_merge
|
16
44
|
|
17
|
-
|
18
|
-
puts "Sorted Array: #{sorter_002.array}"
|
45
|
+
puts "Sorted Array Quicksort: #{sorter_001.array}"
|
46
|
+
puts "Sorted Array Mergesort: #{sorter_002.array}"
|
47
|
+
puts "Sorted Array Sonicsort: #{sorter_003.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.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dants0
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-12-
|
11
|
+
date: 2023-12-29 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,
|
@@ -22,6 +22,8 @@ files:
|
|
22
22
|
- README.md
|
23
23
|
- Rakefile
|
24
24
|
- fastsort-0.1.0.gem
|
25
|
+
- fastsort-0.1.1.gem
|
26
|
+
- fastsort-0.1.2.gem
|
25
27
|
- fastsort.gemspec
|
26
28
|
- lib/fastsort.rb
|
27
29
|
- lib/fastsort/version.rb
|