12345678910111213141516171819202122232425262728293031323334 |
- #!/usr/bin/ruby
- #
- ## https://rosettacode.org/wiki/Sorting_algorithms/Merge_sort
- #
- func merge(left, right) {
- var result = []
- while (left && right) {
- result << [right,left].min_by{.first}.shift
- }
- result + left + right
- }
-
- func mergesort(array) {
- var len = array.len
- len < 2 && return array
-
- var (left, right) = array.part(len//2)
-
- left = __FUNC__(left)
- right = __FUNC__(right)
-
- merge(left, right)
- }
-
- # Numeric sort
- var nums = rand(1..100, 10)
- say mergesort(nums)
-
- # String sort
- var strings = rand('a'..'z', 10)
- say mergesort(strings)
|