Created
January 29, 2019 14:08
-
-
Save bluurn/918dfcd343b744aec46c820163c081d8 to your computer and use it in GitHub Desktop.
JS: Implement Merge Sort
This file contains 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
// Split the array into halves and merge them recursively | |
function mergeSort (arr) { | |
if (arr.length === 1) { | |
// return once we hit an array with a single item | |
return arr | |
} | |
const middle = Math.floor(arr.length / 2) // get the middle item of the array rounded down | |
const left = arr.slice(0, middle) // items on the left side | |
const right = arr.slice(middle) // items on the right side | |
return merge( | |
mergeSort(left), | |
mergeSort(right) | |
) | |
} | |
// compare the arrays item by item and return the concatenated result | |
function merge (left, right) { | |
let result = [] | |
let indexLeft = 0 | |
let indexRight = 0 | |
while (indexLeft < left.length && indexRight < right.length) { | |
if (left[indexLeft] < right[indexRight]) { | |
result.push(left[indexLeft]) | |
indexLeft++ | |
} else { | |
result.push(right[indexRight]) | |
indexRight++ | |
} | |
} | |
return result.concat(left.slice(indexLeft)).concat(right.slice(indexRight)) | |
} | |
const list = [2, 5, 1, 3, 7, 2, 3, 8, 6, 3] | |
console.log(mergeSort(list)) // [ 1, 2, 2, 3, 3, 3, 5, 6, 7, 8 ] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment