归并排序

将两个有序数组合并成一个有序数组。

利用分治算法。

代码实现:

 1 function mergeSort(arr1, arr2) {
 2     var begin1 = 0,    // arr1比较数据的索引,会依次递增
 3         begin2 = 0,    // arr2比较数据的索引,会依次递增
 4         end1 = arr1.length,    
 5         end2 = arr2.length,
 6         arr3 = [];
 7 
 8     // 当比较的索引都没有到数组末尾的时候,循环比较
 9     while (begin1 < end1 && begin2 < end2) {
10         if (arr1[begin1] < arr2[begin2]) {
11             arr3.push(arr1[begin1++]);
12         } else if (arr1[begin1] > arr2[begin2]) {
13             arr3.push(arr2[begin2++]);
14         } else {    // 相等的情况,都要push和索引递增
15             arr3.push(arr1[begin1++]);
16             arr3.push(arr2[begin2++]);
17         }
18     }
19     // 当arr1未到数组末尾时,将剩余数据push
20     if (begin1 < end1) {
21         for (var i=begin1; i<end1; i++) {
22             arr3.push(arr1[i]);
23         }
24     }
25     // 当arr2未到数组末尾时,将剩余数据push
26     if (begin2 < end2) {
27         for (var j=begin2; j<end2; j++) {
28             arr3.push(arr2[j]);
29         }
30     }
31 
32     return arr3;
33 }
Scoop It and Enjoy the Ride!
原文地址:https://www.cnblogs.com/Ruth92/p/5427851.html