📅  最后修改于: 2023-12-03 15:10:10.415000             🧑  作者: Mango
合并排序(Merge Sort)是一种基于分治法的排序算法,最先由约翰·冯·诺伊曼于1945年提出。它的基本思想是将待排序的序列分成左右两部分,分别进行排序,然后将两个已排序的子序列归并成一个有序的序列。它的时间复杂度为O(nlogn),属于稳定排序。
下面是一个合并排序的动态演示,代码采用JavaScript语言实现,展现了算法的所有步骤。
function mergeSort(arr) {
if (arr.length < 2) {
return arr;
}
var middle = Math.floor(arr.length / 2),
left = arr.slice(0, middle),
right = arr.slice(middle); // 分治法:递归地把当前序列平分成两半
return merge(mergeSort(left), mergeSort(right));
}
function merge(left, right) {
var result = [];
while (left.length && right.length) {
if (left[0] <= right[0]) {
result.push(left.shift());
} else {
result.push(right.shift());
}
} // 注意:当其中一个序列为空时,退出循环
while (left.length) result.push(left.shift());
while (right.length) result.push(right.shift()); // 将剩余的块塞到数组后面
return result;
}
下图展示了合并排序的执行过程,可以看到算法是如何将待排序的序列分割成若干个子序列,并最终将它们归并成一个有序的序列的。
作为一种高效的稳定排序算法,合并排序的实现并不复杂,同时也具有很好的可读性和可维护性。它的算法复杂度只与待排序序列的规模有关,与序列中具体的元素值无关,具有良好的可扩展性。因此,它是被广泛应用于各种领域的排序算法之一,是程序员们必须掌握的算法之一。