array-sort 0.1.0 → 0.1.1
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/Gemfile.lock +1 -1
- data/README.md +4 -4
- data/array-sort.gemspec +2 -2
- data/lib/array/sort.rb +1 -0
- data/lib/array/sort/bubble_sort.rb +43 -0
- data/lib/array/sort/heap_sort.rb +46 -0
- data/lib/array/sort/helper.rb +2 -1
- data/lib/array/sort/insertion_sort.rb +42 -0
- data/lib/array/sort/merge_sort.rb +44 -0
- data/lib/array/sort/quick_sort.rb +42 -0
- data/lib/array/sort/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 91c86c745cc5568df53cec34a27f8da0a3b3b24899d0016150b794998b3da1c5
|
4
|
+
data.tar.gz: d63474b2f370ef3454ea7978acb838bf8901e51caf30f668dc9f2392f600befc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af69d008cb08440a894f1ee58583e565dcf4994a5825fd0f57415cbd8aea1fc90bc493c47d73be7e0c5304a8651fa7cd003fbda1a22d97ac3c16e658193ebdc4
|
7
|
+
data.tar.gz: 4dc3acb9501663a583d921c9fef4a50074eace63b1b67ebdc1eead7507e0ffef05c78ed60047fa796c4538e937e8776c71ecd7cd52093815f80d17fb5405af9c
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# ArraySort
|
2
2
|
|
3
|
-
ArraySort adds methods in the Ruby
|
3
|
+
ArraySort adds methods in the Ruby Array class that provides sorting methods using popular sorting algorithms.
|
4
4
|
|
5
5
|
Currently, the following sorting algorithms are implemented:
|
6
6
|
* Bubble sort _(stable)_
|
@@ -9,8 +9,8 @@ Currently, the following sorting algorithms are implemented:
|
|
9
9
|
* Merge sort _(stable)_
|
10
10
|
* Quicksort _(unstable)_
|
11
11
|
|
12
|
-
Note that this gem does not overwrite `Array#sort`, `Array#sort!`, `Array#sort_by`, `Array#sort_by!`. Calling those
|
13
|
-
methods will invoke the native sorting methods, which
|
12
|
+
Note that this gem does not overwrite `Array#sort`, `Array#sort!`, `Array#sort_by`, or `Array#sort_by!`. Calling those
|
13
|
+
methods will invoke the native sorting methods, which use in-place quicksort algorithm and are unstable.
|
14
14
|
|
15
15
|
## Installation
|
16
16
|
|
@@ -40,7 +40,7 @@ change the names of the sorting methods to the following corresponding methods o
|
|
40
40
|
* Quicksort: `quick_sort`, `quick_sort!`, `quick_sort_by`, `quick_sort_by!`
|
41
41
|
|
42
42
|
See the official [Ruby documentation](https://ruby-doc.org/core-2.5.0/Array.html#method-i-sort) on how to use the native
|
43
|
-
sorting methods of
|
43
|
+
sorting methods of Array.
|
44
44
|
|
45
45
|
For example, to sort an array using insertion sort:
|
46
46
|
|
data/array-sort.gemspec
CHANGED
@@ -10,8 +10,8 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.authors = ['Leo Liang']
|
11
11
|
spec.email = ['developer@leoliang.com']
|
12
12
|
|
13
|
-
spec.summary = 'Implementations of
|
14
|
-
spec.description = 'Implements sorting algorithms such as merge sort, bubble sort,
|
13
|
+
spec.summary = 'Implementations of popular sorting algorithms for Arrays.'
|
14
|
+
spec.description = 'Implements sorting algorithms such as merge sort, bubble sort, heap sort, etc. for Arrays.'
|
15
15
|
spec.homepage = 'https://github.com/foxhatleo/array-sort'
|
16
16
|
spec.license = 'MIT'
|
17
17
|
|
data/lib/array/sort.rb
CHANGED
@@ -1,10 +1,32 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Array
|
4
|
+
# Returns a new array created by sorting +self+, using bubble sort algorithm.
|
5
|
+
#
|
6
|
+
# Comparisons for the sort will be done using the <=> operator or using an optional code block.
|
7
|
+
#
|
8
|
+
# The block must implement a comparison between +a+ and +b+ and return an integer less than 0 when +b+ follows +a+,
|
9
|
+
# +0+ when +a+ and +b+ are equivalent, or an integer greater than 0 when +a+ follows +b+.
|
10
|
+
#
|
11
|
+
# The result is guaranteed to be stable. When the comparison of two elements returns +0+, the order of the elements
|
12
|
+
# will be preserved.
|
13
|
+
#
|
14
|
+
# @return [Array] the sorted array
|
4
15
|
def bubble_sort(&block)
|
5
16
|
dup.bubble_sort!(&block)
|
6
17
|
end
|
7
18
|
|
19
|
+
# Sorts +self+ in place, using bubble sort algorithm.
|
20
|
+
#
|
21
|
+
# Comparisons for the sort will be done using the <=> operator or using an optional code block.
|
22
|
+
#
|
23
|
+
# The block must implement a comparison between +a+ and +b+ and return an integer less than 0 when +b+ follows +a+,
|
24
|
+
# +0+ when +a+ and +b+ are equivalent, or an integer greater than 0 when +a+ follows +b+.
|
25
|
+
#
|
26
|
+
# The result is guaranteed to be stable. When the comparison of two elements returns +0+, the order of the elements
|
27
|
+
# will be preserved.
|
28
|
+
#
|
29
|
+
# @return [Array] +self+
|
8
30
|
def bubble_sort!(&block)
|
9
31
|
return self if length <= 1
|
10
32
|
n = length
|
@@ -16,6 +38,16 @@ class Array
|
|
16
38
|
self
|
17
39
|
end
|
18
40
|
|
41
|
+
# Returns a new array created by sorting +self+ with bubble sort algorithm, using a set of keys generated by mapping
|
42
|
+
# the values in self through the given block.
|
43
|
+
#
|
44
|
+
# The result is guaranteed to be stable. When the comparison of two elements returns +0+, the order of the elements
|
45
|
+
# will be preserved.
|
46
|
+
#
|
47
|
+
# If no block is given, an Enumerator is returned instead.
|
48
|
+
#
|
49
|
+
# @return [Array] if a block is given, the sorted array
|
50
|
+
# @return [Enumerator] if no block is given, an Enumerator
|
19
51
|
def bubble_sort_by(&block)
|
20
52
|
if block_given?
|
21
53
|
dup.bubble_sort_by!(&block)
|
@@ -24,6 +56,16 @@ class Array
|
|
24
56
|
end
|
25
57
|
end
|
26
58
|
|
59
|
+
# Sorts +self+ in place with bubble sort algorithm, using a set of keys generated by mapping the values in self
|
60
|
+
# through the given block.
|
61
|
+
#
|
62
|
+
# The result is guaranteed to be stable. When the comparison of two elements returns +0+, the order of the elements
|
63
|
+
# will be preserved.
|
64
|
+
#
|
65
|
+
# If no block is given, an Enumerator is returned instead.
|
66
|
+
#
|
67
|
+
# @return [Array] if a block is given, the sorted array
|
68
|
+
# @return [Enumerator] if no block is given, an Enumerator
|
27
69
|
def bubble_sort_by!(&_block)
|
28
70
|
if block_given?
|
29
71
|
bubble_sort! do |a, b|
|
@@ -36,6 +78,7 @@ class Array
|
|
36
78
|
|
37
79
|
private
|
38
80
|
|
81
|
+
# @private
|
39
82
|
def bubble_sort_check(length_checking, &block)
|
40
83
|
new_n = 0
|
41
84
|
(1...length_checking).each do |i|
|
data/lib/array/sort/heap_sort.rb
CHANGED
@@ -1,10 +1,32 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Array
|
4
|
+
# Returns a new array created by sorting +self+, using heap sort algorithm.
|
5
|
+
#
|
6
|
+
# Comparisons for the sort will be done using the <=> operator or using an optional code block.
|
7
|
+
#
|
8
|
+
# The block must implement a comparison between +a+ and +b+ and return an integer less than 0 when +b+ follows +a+,
|
9
|
+
# +0+ when +a+ and +b+ are equivalent, or an integer greater than 0 when +a+ follows +b+.
|
10
|
+
#
|
11
|
+
# The result is not guaranteed to be stable. When the comparison of two elements returns +0+, the order of the
|
12
|
+
# elements is unpredictable.
|
13
|
+
#
|
14
|
+
# @return [Array] the sorted array
|
4
15
|
def heap_sort(&block)
|
5
16
|
dup.heap_sort!(&block)
|
6
17
|
end
|
7
18
|
|
19
|
+
# Sorts +self+ in place, using heap sort algorithm.
|
20
|
+
#
|
21
|
+
# Comparisons for the sort will be done using the <=> operator or using an optional code block.
|
22
|
+
#
|
23
|
+
# The block must implement a comparison between +a+ and +b+ and return an integer less than 0 when +b+ follows +a+,
|
24
|
+
# +0+ when +a+ and +b+ are equivalent, or an integer greater than 0 when +a+ follows +b+.
|
25
|
+
#
|
26
|
+
# The result is not guaranteed to be stable. When the comparison of two elements returns +0+, the order of the
|
27
|
+
# elements is unpredictable.
|
28
|
+
#
|
29
|
+
# @return [Array] +self+
|
8
30
|
def heap_sort!(&block)
|
9
31
|
return self if length <= 1
|
10
32
|
heapify(&block)
|
@@ -15,6 +37,16 @@ class Array
|
|
15
37
|
self
|
16
38
|
end
|
17
39
|
|
40
|
+
# Returns a new array created by sorting +self+ with heap sort algorithm, using a set of keys generated by mapping the
|
41
|
+
# values in self through the given block.
|
42
|
+
#
|
43
|
+
# The result is not guaranteed to be stable. When the comparison of two elements returns +0+, the order of the
|
44
|
+
# elements is unpredictable.
|
45
|
+
#
|
46
|
+
# If no block is given, an Enumerator is returned instead.
|
47
|
+
#
|
48
|
+
# @return [Array] if a block is given, the sorted array
|
49
|
+
# @return [Enumerator] if no block is given, an Enumerator
|
18
50
|
def heap_sort_by(&block)
|
19
51
|
if block_given?
|
20
52
|
dup.heap_sort_by!(&block)
|
@@ -23,6 +55,16 @@ class Array
|
|
23
55
|
end
|
24
56
|
end
|
25
57
|
|
58
|
+
# Sorts +self+ in place with heap sort algorithm, using a set of keys generated by mapping the values in self through
|
59
|
+
# the given block.
|
60
|
+
#
|
61
|
+
# The result is not guaranteed to be stable. When the comparison of two elements returns +0+, the order of the
|
62
|
+
# elements is unpredictable.
|
63
|
+
#
|
64
|
+
# If no block is given, an Enumerator is returned instead.
|
65
|
+
#
|
66
|
+
# @return [Array] if a block is given, the sorted array
|
67
|
+
# @return [Enumerator] if no block is given, an Enumerator
|
26
68
|
def heap_sort_by!(&_block)
|
27
69
|
if block_given?
|
28
70
|
heap_sort! do |a, b|
|
@@ -35,6 +77,7 @@ class Array
|
|
35
77
|
|
36
78
|
private
|
37
79
|
|
80
|
+
# @private
|
38
81
|
def heapify(&block)
|
39
82
|
end_ = length - 1
|
40
83
|
(length / 2 - 1).downto(0) do |start|
|
@@ -42,6 +85,7 @@ class Array
|
|
42
85
|
end
|
43
86
|
end
|
44
87
|
|
88
|
+
# @private
|
45
89
|
def sift_down(start, end_, &block)
|
46
90
|
root = start
|
47
91
|
loop do
|
@@ -53,10 +97,12 @@ class Array
|
|
53
97
|
end
|
54
98
|
end
|
55
99
|
|
100
|
+
# @private
|
56
101
|
def check_less_than_sibling(child, end_, &block)
|
57
102
|
child + 1 <= end_ && sort_compare(self[child], self[child + 1], &block) == -1
|
58
103
|
end
|
59
104
|
|
105
|
+
# @private
|
60
106
|
def check_max_heap_order(root, child, &block)
|
61
107
|
return true unless sort_compare(self[root], self[child], &block) == -1
|
62
108
|
swap root, child
|
data/lib/array/sort/helper.rb
CHANGED
@@ -6,6 +6,7 @@ class Array
|
|
6
6
|
# @param index1 [Integer] The index of the first element.
|
7
7
|
# @param index2 [Integer] The index of the second element.
|
8
8
|
# @return [Array]
|
9
|
+
# @raise [ArgumentError] If either of the two parameters is not an Integer.
|
9
10
|
def swap(index1, index2)
|
10
11
|
raise ArgumentError, 'Index must be an integer.' unless index1.is_a?(Integer) && index2.is_a?(Integer)
|
11
12
|
self[index1], self[index2] = self[index2], self[index1] if index1 != index2
|
@@ -16,7 +17,7 @@ class Array
|
|
16
17
|
|
17
18
|
# Compare two elements.
|
18
19
|
#
|
19
|
-
# If a block is provided, it will be used to compare the two elements. If not, +<=>+ will be used.
|
20
|
+
# If a block is provided, it will be used to compare the two elements. If not, operator +<=>+ will be used.
|
20
21
|
def sort_compare(element1, element2, &_block)
|
21
22
|
if block_given?
|
22
23
|
yield element1, element2
|
@@ -1,10 +1,32 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Array
|
4
|
+
# Returns a new array created by sorting +self+, using insertion sort algorithm.
|
5
|
+
#
|
6
|
+
# Comparisons for the sort will be done using the <=> operator or using an optional code block.
|
7
|
+
#
|
8
|
+
# The block must implement a comparison between +a+ and +b+ and return an integer less than 0 when +b+ follows +a+,
|
9
|
+
# +0+ when +a+ and +b+ are equivalent, or an integer greater than 0 when +a+ follows +b+.
|
10
|
+
#
|
11
|
+
# The result is guaranteed to be stable. When the comparison of two elements returns +0+, the order of the elements
|
12
|
+
# will be preserved.
|
13
|
+
#
|
14
|
+
# @return [Array] the sorted array
|
4
15
|
def insertion_sort(&block)
|
5
16
|
dup.insertion_sort!(&block)
|
6
17
|
end
|
7
18
|
|
19
|
+
# Sorts +self+ in place, using insertion sort algorithm.
|
20
|
+
#
|
21
|
+
# Comparisons for the sort will be done using the <=> operator or using an optional code block.
|
22
|
+
#
|
23
|
+
# The block must implement a comparison between +a+ and +b+ and return an integer less than 0 when +b+ follows +a+,
|
24
|
+
# +0+ when +a+ and +b+ are equivalent, or an integer greater than 0 when +a+ follows +b+.
|
25
|
+
#
|
26
|
+
# The result is guaranteed to be stable. When the comparison of two elements returns +0+, the order of the elements
|
27
|
+
# will be preserved.
|
28
|
+
#
|
29
|
+
# @return [Array] +self+
|
8
30
|
def insertion_sort!(&block)
|
9
31
|
return self if length <= 1
|
10
32
|
(1...length).each do |i|
|
@@ -16,6 +38,16 @@ class Array
|
|
16
38
|
self
|
17
39
|
end
|
18
40
|
|
41
|
+
# Returns a new array created by sorting +self+ with insertion sort algorithm, using a set of keys generated by
|
42
|
+
# mapping the values in self through the given block.
|
43
|
+
#
|
44
|
+
# The result is guaranteed to be stable. When the comparison of two elements returns +0+, the order of the elements
|
45
|
+
# will be preserved.
|
46
|
+
#
|
47
|
+
# If no block is given, an Enumerator is returned instead.
|
48
|
+
#
|
49
|
+
# @return [Array] if a block is given, the sorted array
|
50
|
+
# @return [Enumerator] if no block is given, an Enumerator
|
19
51
|
def insertion_sort_by(&block)
|
20
52
|
if block_given?
|
21
53
|
dup.insertion_sort_by!(&block)
|
@@ -24,6 +56,16 @@ class Array
|
|
24
56
|
end
|
25
57
|
end
|
26
58
|
|
59
|
+
# Sorts +self+ in place with insertion sort algorithm, using a set of keys generated by mapping the values in self
|
60
|
+
# through the given block.
|
61
|
+
#
|
62
|
+
# The result is guaranteed to be stable. When the comparison of two elements returns +0+, the order of the elements
|
63
|
+
# will be preserved.
|
64
|
+
#
|
65
|
+
# If no block is given, an Enumerator is returned instead.
|
66
|
+
#
|
67
|
+
# @return [Array] if a block is given, the sorted array
|
68
|
+
# @return [Enumerator] if no block is given, an Enumerator
|
27
69
|
def insertion_sort_by!(&_block)
|
28
70
|
if block_given?
|
29
71
|
insertion_sort! do |a, b|
|
@@ -1,6 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Array
|
4
|
+
# Returns a new array created by sorting +self+, using merge sort algorithm.
|
5
|
+
#
|
6
|
+
# Comparisons for the sort will be done using the <=> operator or using an optional code block.
|
7
|
+
#
|
8
|
+
# The block must implement a comparison between +a+ and +b+ and return an integer less than 0 when +b+ follows +a+,
|
9
|
+
# +0+ when +a+ and +b+ are equivalent, or an integer greater than 0 when +a+ follows +b+.
|
10
|
+
#
|
11
|
+
# The result is guaranteed to be stable. When the comparison of two elements returns +0+, the order of the elements
|
12
|
+
# will be preserved.
|
13
|
+
#
|
14
|
+
# @return [Array] the sorted array
|
4
15
|
def merge_sort(&block)
|
5
16
|
return dup if length <= 1
|
6
17
|
divided_parts = merge_sort_divide
|
@@ -9,10 +20,31 @@ class Array
|
|
9
20
|
merge_sort_merge part_a_sorted, part_b_sorted, &block
|
10
21
|
end
|
11
22
|
|
23
|
+
# Sorts +self+ in place, using merge sort algorithm.
|
24
|
+
#
|
25
|
+
# Comparisons for the sort will be done using the <=> operator or using an optional code block.
|
26
|
+
#
|
27
|
+
# The block must implement a comparison between +a+ and +b+ and return an integer less than 0 when +b+ follows +a+,
|
28
|
+
# +0+ when +a+ and +b+ are equivalent, or an integer greater than 0 when +a+ follows +b+.
|
29
|
+
#
|
30
|
+
# The result is guaranteed to be stable. When the comparison of two elements returns +0+, the order of the elements
|
31
|
+
# will be preserved.
|
32
|
+
#
|
33
|
+
# @return [Array] +self+
|
12
34
|
def merge_sort!(&block)
|
13
35
|
become_clone_of merge_sort(&block)
|
14
36
|
end
|
15
37
|
|
38
|
+
# Returns a new array created by sorting +self+ with merge sort algorithm, using a set of keys generated by mapping
|
39
|
+
# the values in self through the given block.
|
40
|
+
#
|
41
|
+
# The result is guaranteed to be stable. When the comparison of two elements returns +0+, the order of the elements
|
42
|
+
# will be preserved.
|
43
|
+
#
|
44
|
+
# If no block is given, an Enumerator is returned instead.
|
45
|
+
#
|
46
|
+
# @return [Array] if a block is given, the sorted array
|
47
|
+
# @return [Enumerator] if no block is given, an Enumerator
|
16
48
|
def merge_sort_by(&_block)
|
17
49
|
if block_given?
|
18
50
|
merge_sort do |a, b|
|
@@ -23,6 +55,16 @@ class Array
|
|
23
55
|
end
|
24
56
|
end
|
25
57
|
|
58
|
+
# Sorts +self+ in place with merge sort algorithm, using a set of keys generated by mapping the values in self through
|
59
|
+
# the given block.
|
60
|
+
#
|
61
|
+
# The result is guaranteed to be stable. When the comparison of two elements returns +0+, the order of the elements
|
62
|
+
# will be preserved.
|
63
|
+
#
|
64
|
+
# If no block is given, an Enumerator is returned instead.
|
65
|
+
#
|
66
|
+
# @return [Array] if a block is given, the sorted array
|
67
|
+
# @return [Enumerator] if no block is given, an Enumerator
|
26
68
|
def merge_sort_by!(&block)
|
27
69
|
if block_given?
|
28
70
|
become_clone_of merge_sort_by(&block)
|
@@ -33,6 +75,7 @@ class Array
|
|
33
75
|
|
34
76
|
private
|
35
77
|
|
78
|
+
# @private
|
36
79
|
def merge_sort_divide
|
37
80
|
mid = length / 2
|
38
81
|
part_a = self[0, mid]
|
@@ -40,6 +83,7 @@ class Array
|
|
40
83
|
[part_a, part_b]
|
41
84
|
end
|
42
85
|
|
86
|
+
# @private
|
43
87
|
def merge_sort_merge(part_a, part_b, &block)
|
44
88
|
result = []
|
45
89
|
while part_a.length.positive? && part_b.length.positive?
|
@@ -1,16 +1,48 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Array
|
4
|
+
# Returns a new array created by sorting +self+, using quicksort algorithm.
|
5
|
+
#
|
6
|
+
# Comparisons for the sort will be done using the <=> operator or using an optional code block.
|
7
|
+
#
|
8
|
+
# The block must implement a comparison between +a+ and +b+ and return an integer less than 0 when +b+ follows +a+,
|
9
|
+
# +0+ when +a+ and +b+ are equivalent, or an integer greater than 0 when +a+ follows +b+.
|
10
|
+
#
|
11
|
+
# The result is not guaranteed to be stable. When the comparison of two elements returns +0+, the order of the
|
12
|
+
# elements is unpredictable.
|
13
|
+
#
|
14
|
+
# @return [Array] the sorted array
|
4
15
|
def quick_sort(&block)
|
5
16
|
return dup if length <= 1
|
6
17
|
left, right = self[1..-1].partition { |y| sort_compare(first, y, &block).positive? }
|
7
18
|
left.quick_sort + [first] + right.quick_sort
|
8
19
|
end
|
9
20
|
|
21
|
+
# Sorts +self+ in place, using quicksort algorithm.
|
22
|
+
#
|
23
|
+
# Comparisons for the sort will be done using the <=> operator or using an optional code block.
|
24
|
+
#
|
25
|
+
# The block must implement a comparison between +a+ and +b+ and return an integer less than 0 when +b+ follows +a+,
|
26
|
+
# +0+ when +a+ and +b+ are equivalent, or an integer greater than 0 when +a+ follows +b+.
|
27
|
+
#
|
28
|
+
# The result is not guaranteed to be stable. When the comparison of two elements returns +0+, the order of the
|
29
|
+
# elements is unpredictable.
|
30
|
+
#
|
31
|
+
# @return [Array] +self+
|
10
32
|
def quick_sort!(&block)
|
11
33
|
become_clone_of quick_sort(&block)
|
12
34
|
end
|
13
35
|
|
36
|
+
# Returns a new array created by sorting +self+ with quicksort algorithm, using a set of keys generated by mapping
|
37
|
+
# the values in self through the given block.
|
38
|
+
#
|
39
|
+
# The result is not guaranteed to be stable. When the comparison of two elements returns +0+, the order of the
|
40
|
+
# elements is unpredictable.
|
41
|
+
#
|
42
|
+
# If no block is given, an Enumerator is returned instead.
|
43
|
+
#
|
44
|
+
# @return [Array] if a block is given, the sorted array
|
45
|
+
# @return [Enumerator] if no block is given, an Enumerator
|
14
46
|
def quick_sort_by(&_block)
|
15
47
|
if block_given?
|
16
48
|
quick_sort do |a, b|
|
@@ -21,6 +53,16 @@ class Array
|
|
21
53
|
end
|
22
54
|
end
|
23
55
|
|
56
|
+
# Sorts +self+ in place with quicksort algorithm, using a set of keys generated by mapping the values in self through
|
57
|
+
# the given block.
|
58
|
+
#
|
59
|
+
# The result is not guaranteed to be stable. When the comparison of two elements returns +0+, the order of the
|
60
|
+
# elements is unpredictable.
|
61
|
+
#
|
62
|
+
# If no block is given, an Enumerator is returned instead.
|
63
|
+
#
|
64
|
+
# @return [Array] if a block is given, the sorted array
|
65
|
+
# @return [Enumerator] if no block is given, an Enumerator
|
24
66
|
def quick_sort_by!(&block)
|
25
67
|
if block_given?
|
26
68
|
become_clone_of quick_sort_by(&block)
|
data/lib/array/sort/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: array-sort
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leo Liang
|
@@ -52,8 +52,8 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '10.0'
|
55
|
-
description: Implements sorting algorithms such as merge sort, bubble sort,
|
56
|
-
|
55
|
+
description: Implements sorting algorithms such as merge sort, bubble sort, heap sort,
|
56
|
+
etc. for Arrays.
|
57
57
|
email:
|
58
58
|
- developer@leoliang.com
|
59
59
|
executables: []
|
@@ -102,5 +102,5 @@ rubyforge_project:
|
|
102
102
|
rubygems_version: 2.7.6
|
103
103
|
signing_key:
|
104
104
|
specification_version: 4
|
105
|
-
summary: Implementations of
|
105
|
+
summary: Implementations of popular sorting algorithms for Arrays.
|
106
106
|
test_files: []
|