Skip to content

Instantly share code, notes, and snippets.

@liuwenzhuang
Created March 21, 2018 06:35
Show Gist options
  • Save liuwenzhuang/a1da6862928d5adbc9674edd68844dfe to your computer and use it in GitHub Desktop.
Save liuwenzhuang/a1da6862928d5adbc9674edd68844dfe to your computer and use it in GitHub Desktop.
归并排序,递归实现分治,将数据源递归分割成最小单位,然后递归将这些最小有序的单位合并成大的有序集合。Merge Sort, Divide and Conquer.
function merge(left, right) {
var result = [];
while(left.length && right.length) {
if(left[0] > right[0]) result.push(right.shift());
else result.push(left.shift());
}
while(left.length) result.push(left.shift());
while(right.length) result.push(right.shift());
return result;
}
function mergeSort(arr) {
var len = arr.length;
if(len < 2) return arr; // 只有一个元素的数组天然有序
var midIndex = Math.floor(len / 2);
var leftArr = arr.slice(0, midIndex);
var rightArr = arr.slice(midIndex);
return merge(mergeSort(leftArr), mergeSort(rightArr));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment