|
1 | 1 | 'use strict';
|
2 | 2 |
|
3 | 3 | /**
|
4 |
| - * @param {Array} left |
5 |
| - * @param {Array} right |
| 4 | + * @param {Array} elements |
6 | 5 | * @return {Array}
|
7 | 6 | */
|
8 |
| -function merge (left, right) { |
9 |
| - const mergedArr = []; |
10 |
| - let i = 0; |
11 |
| - let j = 0; |
| 7 | +export default function mergeSort (elements) { |
| 8 | + if (elements.length < 2) return elements; |
12 | 9 |
|
13 |
| - while (i < left.length || j < right.length) { |
14 |
| - if (i < left.length) { |
15 |
| - if (j < right.length && right[j] < left[i]) { |
16 |
| - mergedArr.push(right[j++]); |
17 |
| - continue; |
18 |
| - } |
| 10 | + const mid = Math.floor(elements.length / 2); |
| 11 | + const arrayOne = elements.slice(0, mid); |
| 12 | + const arrayTwo = elements.slice(mid, elements.length); |
19 | 13 |
|
20 |
| - mergedArr.push(left[i++]); |
21 |
| - } else { |
22 |
| - mergedArr.push(right[j++]); |
23 |
| - } |
24 |
| - } |
25 |
| - |
26 |
| - return mergedArr; |
| 14 | + return merge(mergeSort(arrayOne), mergeSort(arrayTwo)); |
27 | 15 | }
|
28 | 16 |
|
29 | 17 | /**
|
30 |
| - * @param {Array} elements |
| 18 | + * @param {Array} arrayOne |
| 19 | + * @param {Array} arrayTwo |
31 | 20 | * @return {Array}
|
32 | 21 | */
|
33 |
| -export default function mergeSort (elements) { |
34 |
| - const length = elements.length; |
| 22 | +function merge (arrayOne, arrayTwo) { |
| 23 | + const mergedArr = []; |
| 24 | + let i = 0; |
| 25 | + let j = 0; |
35 | 26 |
|
36 |
| - if (length < 2) { |
37 |
| - return elements; |
| 27 | + while (i < arrayOne.length && j < arrayTwo.length) { |
| 28 | + if (arrayOne[i] < arrayTwo[j]) { |
| 29 | + mergedArr.push(arrayOne[i++]); |
| 30 | + } else { |
| 31 | + mergedArr.push(arrayTwo[j++]); |
| 32 | + } |
38 | 33 | }
|
39 | 34 |
|
40 |
| - const halfLength = Math.floor(length / 2); |
| 35 | + while (i < arrayOne.length) { |
| 36 | + mergedArr.push(arrayOne[i++]); |
| 37 | + } |
| 38 | + |
| 39 | + while (j < arrayTwo.length) { |
| 40 | + mergedArr.push(arrayTwo[j++]); |
| 41 | + } |
41 | 42 |
|
42 |
| - return merge(mergeSort(elements.slice(0, halfLength)), mergeSort(elements.slice(halfLength, length))); |
43 |
| -}; |
| 43 | + return mergedArr; |
| 44 | +} |
0 commit comments