Created
January 11, 2020 00:16
-
-
Save amejiarosario/ac7edd54dde45c5b40d226d686b9992a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Sort array in asc order using merge-sort | |
* @example | |
* sort([3, 2, 1]) => [1, 2, 3] | |
* sort([3]) => [3] | |
* sort([3, 2]) => [2, 3] | |
* @param {array} array | |
*/ | |
function sort(array = []) { | |
const size = array.length; | |
// base case | |
if (size < 2) { | |
return array; | |
} | |
if (size === 2) { | |
return array[0] > array[1] ? [array[1], array[0]] : array; | |
} | |
// slit and merge | |
const mid = parseInt(size / 2, 10); | |
return merge(sort(array.slice(0, mid)), sort(array.slice(mid))); | |
} | |
/** | |
* Merge two arrays in asc order | |
* @example | |
* merge([2,5,9], [1,6,7]) => [1, 2, 5, 6, 7, 9] | |
* @param {array} array1 | |
* @param {array} array2 | |
* @returns {array} merged arrays in asc order | |
*/ | |
function merge(array1 = [], array2 = []) { | |
const merged = []; | |
let array1Index = 0; | |
let array2Index = 0; | |
// merge elements on a and b in asc order. Run-time O(a + b) | |
while (array1Index < array1.length || array2Index < array2.length) { | |
if (array1Index >= array1.length || array1[array1Index] > array2[array2Index]) { | |
merged.push(array2[array2Index]); | |
array2Index += 1; | |
} else { | |
merged.push(array1[array1Index]); | |
array1Index += 1; | |
} | |
} | |
return merged; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment