归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。
归并操作的过程如下:
1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
2.设定两个指针,最初位置分别为两个已经排序序列的起始位置
3.比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
4.重复步骤3直到某一指针达到序列尾
5.将另一序列剩下的所有元素直接复制到合并序列尾
示例1:
/** * 合并操作(merge),也叫合并算法,指的是将两个已经排序的序列合并成一个序列的操作。 * 合并排序算法依赖合并操作。 * * 合并操作的过程如下: * * 1、申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 * 2、设定两个指针,最初位置分别为两个已经排序序列的起始位置 * 3、比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置 * 4、重复步骤3直到某一指针达到序列尾 * 5、将另一序列剩下的所有元素直接复制到合并序列尾 * */ function mergeSort(items) { if (items.length
示例2: