常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。这里主要介绍
归并排序
。算法
一图胜千言:segmentfault
归并排序是创建在归并操做上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个典型的应用。 合并排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每一个子序列是有序的。而后再把有序子序列合并为总体有序序列。 将已有序的子序列合并,获得彻底有序的序列;即先使每一个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。数组
时间复杂度:O (nlogn)ide
空间复杂度:O (n)spa
function merge(leftArr, rightArr){ var result = []; while (leftArr.length > 0 && rightArr.length > 0){ if (leftArr[0] < rightArr[0]) result.push(leftArr.shift()); //把最小的最早取出,放到结果集中 else result.push(rightArr.shift()); } return result.concat(leftArr).concat(rightArr); //剩下的就是合并,这样就排好序了 } function mergeSort(array){ if (array.length == 1) return array; var middle = Math.floor(array.length / 2); //求出中点 var left = array.slice(0, middle); //分割数组 var right = array.slice(middle); return merge(mergeSort(left), mergeSort(right)); //递归合并与排序 } var arr = mergeSort([32,12,56,78,76,45,36]); console.log(arr); // [12, 32, 36, 45, 56, 76, 78]