罕见的内部排序算法有:插入排序、希尔排序、挑选排序、冒泡排序、兼并排序、疾速排序、堆排序、基数排序等。这里重要引见
兼并排序
。
一图胜千言:
1.兼并排序
1.1 算法形貌
兼并排序是建立在兼并操纵上的一种有用的排序算法。该算法是采纳分治法(Divide and Conquer)的一个典范的运用。 兼并排序法是将两个(或两个以上)有序表兼并成一个新的有序表,即把待排序序列分为多少个子序列,每个子序列是有序的。然后再把有序子序列兼并为团体有序序列。 将已有序的子序列兼并,获得完整有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表兼并成一个有序表,称为2-路兼并。
1.2 算法剖析
时候复杂度:O (nlogn)
空间复杂度:O (n)
1.3 算法完成
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]