Skip to content

Commit fddccc0

Browse files
authored
Merge pull request TheAlgorithms#29 from Polyneue/enhancement/TheAlgorithms#14-add-merge-sort
TheAlgorithms#14 - Adding merge sort algorithm
2 parents cedbe13 + 0956fd4 commit fddccc0

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

Sorts/mergeSort.js

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/**
2+
* Merge Sort is an algorithm where the main list is divided down into two half
3+
* sized lists, which then have merge sort called on these two smaller lists
4+
* recursively until there is only a sorted list of one.
5+
*
6+
* On the way up the recursive calls, the lists will be merged together inserting
7+
* the smaller value first, creating a larger sorted list.
8+
*/
9+
10+
/**
11+
* Sort and merge two given arrays
12+
* @param {Array} list1 - sublist to break down
13+
* @param {Array} list2 - sublist to break down
14+
* @return {Array} merged list
15+
*/
16+
function merge(list1, list2) {
17+
var results = [];
18+
19+
while(list1.length && list2.length) {
20+
if (list1[0] <= list2[0]) {
21+
results.push(list1.shift());
22+
} else {
23+
results.push(list2.shift());
24+
}
25+
}
26+
return results.concat(list1, list2);
27+
}
28+
29+
/**
30+
* Break down the lists into smaller pieces to be merged
31+
* @param {Array} list - list to be sorted
32+
* @return {Array} sorted list
33+
*/
34+
function mergeSort(list) {
35+
if (list.length < 2) return list;
36+
37+
var listHalf = Math.floor(list.length/2);
38+
var subList1 = list.slice(0, listHalf);
39+
var subList2 = list.slice(listHalf, list.length);
40+
41+
return merge(mergeSort(subList1), mergeSort(subList2));
42+
}
43+
44+
// Merge Sort Example
45+
var unsortedArray = [10, 5, 3, 8, 2, 6, 4, 7, 9, 1];
46+
var sortedArray = mergeSort(unsortedArray);
47+
48+
console.log('Before:', unsortedArray, 'After:', sortedArray);
49+

0 commit comments

Comments
 (0)