Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit cd56d6a

Browse files
committed
Merge pull request mgechev#83 from lekkas/mergesort-with-queues
mergesort: Use queues to efficiently merge left and right sub-arrays.
2 parents ba36330 + 66eab6e commit cd56d6a

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

src/sorting/mergesort.js

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
*/
55
'use strict';
66

7+
var ll = require('../data-structures/linked-list.js');
8+
79
function compare(a, b) {
810
return a - b;
911
}
@@ -61,8 +63,9 @@
6163
* }, 0, 4, 7);
6264
*/
6365
mergeSort.merge = function (array, cmp, start, middle, end) {
64-
var left = [];
65-
var right = [];
66+
var left = new ll.LinkedList();
67+
var right = new ll.LinkedList();
68+
6669
var leftSize = middle - start;
6770
var rightSize = end - middle;
6871
var maxSize = Math.max(leftSize, rightSize);
@@ -71,24 +74,24 @@
7174

7275
for (i = 0; i < maxSize; i += 1) {
7376
if (i < leftSize) {
74-
left[i] = array[start + i];
77+
left.push(array[start + i]);
7578
}
7679
if (i < rightSize) {
77-
right[i] = array[middle + i];
80+
right.push(array[middle + i]);
7881
}
7982
}
8083
i = 0;
8184
while (i < size) {
82-
if (left.length && right.length) {
83-
if (cmp(left[0], right[0]) > 0) {
84-
array[start + i] = right.shift();
85+
if (left.first && right.first) {
86+
if (cmp(left.first.data, right.first.data) > 0) {
87+
array[start + i] = right.shift().data;
8588
} else {
86-
array[start + i] = left.shift();
89+
array[start + i] = left.shift().data;
8790
}
88-
} else if (left.length) {
89-
array[start + i] = left.shift();
91+
} else if (left.first) {
92+
array[start + i] = left.shift().data;
9093
} else {
91-
array[start + i] = right.shift();
94+
array[start + i] = right.shift().data;
9295
}
9396
i += 1;
9497
}

0 commit comments

Comments
 (0)