Skip to content
Snippets Groups Projects
Commit b6aea74c authored by Brady James Garvin's avatar Brady James Garvin
Browse files

Designed and implemented merge sort.

parent 6a1185d3
No related branches found
No related tags found
No related merge requests found
...@@ -21,19 +21,19 @@ Problem: Sort a list in Θ(n log n) time. ...@@ -21,19 +21,19 @@ Problem: Sort a list in Θ(n log n) time.
``` ```
In: [8, 7, 6, 9, 5] In: [8, 7, 6, 9, 5]
Out: [, …, …, …, …] Out: [5, 6, 7, 8, 9]
/ \ / \
/ \ / \
In: […] In: [] In: [8, 7] In: [6, 9, 5]
Out: […] Out: [] Out: [7, 8] Out: [5, 6, 9]
/ \ / \ / \ / \
/ \ / \ / \ / \
In: [] In: [] In: [] In: [] In: [8] In: [7] In: [6] In: [9, 5]
Out: [] Out: [] Out: [] Out: [] Out: [8] Out: [7] Out: [6] Out: [5, 9]
/ \ / \
/ \ / \
In: [] In: [] In: [9] In: [5]
Out: [] Out: [] Out: [9] Out: [5]
``` ```
## Analysis ## Analysis
...@@ -42,14 +42,14 @@ Out: […] Out: […] Out: […] Out: […] ...@@ -42,14 +42,14 @@ Out: […] Out: […] Out: […] Out: […]
T(n) = T(⌊n/2⌋) + T(⌈n/2⌉) + Θ(n) for n ≫ 0 T(n) = T(⌊n/2⌋) + T(⌈n/2⌉) + Θ(n) for n ≫ 0
T(n) ≈ 2T(n/2) + Θ(n) for n ≫ 0 T(n) ≈ 2T(n/2) + Θ(n) for n ≫ 0
T(n) = Θ() T(n) = Θ(n log n)
* Uneven split: * Uneven split:
T(n) = T(n - 1) + T(1) + Θ(n) for n ≫ 0 T(n) = T(n - 1) + T(1) + Θ(n) for n ≫ 0
T(n) = T(n - 1) + Θ(1) + Θ(n) for n ≫ 0 T(n) = T(n - 1) + Θ(1) + Θ(n) for n ≫ 0
T(n) = T(n - 1) + Θ(n) for n ≫ 0 T(n) = T(n - 1) + Θ(n) for n ≫ 0
T(n) = Θ() T(n) = Θ()
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
......
function merge(left, right) { function merge(left, right) {
return []; // TODO: stub const results = [];
let i = 0;
let j = 0;
while (i < left.length || j < right.length) {
if (j >= right.length || (i < left.length && left[i] < right[j])) {
results.push(left[i]);
++i;
} else {
results.push(right[j]);
++j;
}
}
return results;
} }
export function sort(list) { export function sort(list) {
return list; // TODO: stub if (list.length < 2) {
return list;
}
const middleIndex = Math.floor(list.length / 2);
const left = sort(list.slice(0, middleIndex));
const right = sort(list.slice(middleIndex, list.length));
return merge(left, right);
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment