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();
}());