Skip to content

#14 - Adding merge sort algorithm #29

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 5, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions Sorts/mergeSort.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/**
* Merge Sort is an algorithm where the main list is divided down into two half
* sized lists, which then have merge sort called on these two smaller lists
* recursively until there is only a sorted list of one.
*
* On the way up the recursive calls, the lists will be merged together inserting
* the smaller value first, creating a larger sorted list.
*/

/**
* Sort and merge two given arrays
* @param {Array} list1 - sublist to break down
* @param {Array} list2 - sublist to break down
* @return {Array} merged list
*/
function merge(list1, list2) {
var results = [];

while(list1.length && list2.length) {
if (list1[0] <= list2[0]) {
results.push(list1.shift());
} else {
results.push(list2.shift());
}
}
return results.concat(list1, list2);
}

/**
* Break down the lists into smaller pieces to be merged
* @param {Array} list - list to be sorted
* @return {Array} sorted list
*/
function mergeSort(list) {
if (list.length < 2) return list;

var listHalf = Math.floor(list.length/2);
var subList1 = list.slice(0, listHalf);
var subList2 = list.slice(listHalf, list.length);

return merge(mergeSort(subList1), mergeSort(subList2));
}

// Merge Sort Example
var unsortedArray = [10, 5, 3, 8, 2, 6, 4, 7, 9, 1];
var sortedArray = mergeSort(unsortedArray);

console.log('Before:', unsortedArray, 'After:', sortedArray);