Merge Sort
by jessekinsman
HTML
<link rel="stylesheet" href="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine.css">
<script src="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine.js"></script>
<script src="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine-html.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.2/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.2/react-dom.js"></script>
<div id='target'>no snapshots</div>
CSS
td {
color: white;
padding: 5px;
text-align: center;
}
table {
margin-bottom: 10px;
}
Babel + JSX
const mergeSort = (nums) => {
if (nums.length < 2) {
return nums;
}
const length = nums.length;
const middle = Math.floor(length/2);
const left = nums.slice(0, middle);
const right = nums.slice(middle, length);
return merge(mergeSort(left), mergeSort(right));
}
const merge = (left, right) => {
const results = [];
while(left.length && right.length) {
if (left[0] <= right[0]) {
results.push(left.shift());
} else {
results.push(right.shift());
}
}
while(left.length) {
results.push(left.shift());
}
while(right.length) {
results.push(right.shift());
}
}
// end of visualization script
describe('merge sort', function() {
it('should sort correctly', () => {
var nums = [10,5,3,8,2,6,4,7,9,1];
var ans = mergeSort(nums);
expect(ans).toEqual([1,2,3,4,5,6,7,8,9,10]);
});
});
// load jasmine htmlReporter
(function() {
var env = jasmine.getEnv();
env.addReporter(new jasmine.HtmlReporter());
env.execute();
}());