归并排序
将两个有序数组合并成一个有序数组。
利用分治算法。
代码实现:
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!