归并排序是一种基于归并运算的高效排序算法,该算法是分而治之的一种典型应用。

合并(合并)排序方法是将两个或多个有序表合并为一个新的有序表,即将有序序列划分为若干个子序列,并对每个子序列进行排序,然后将有序子序列合并为一个整序列。

归并排序是一种有效的排序算法的基础上合并操作。该算法是一个非常典型的应用分而治之。有序序列合并,得到一个完全有序的序列,使每个子序列的序列,然后进行序列之间的序列,如果两个有序表合并成一个有序的表,它被称为合并的2路。

合并操作的过程如下:

1。应用空间,它是两个排序序列之和,用于存储合并序列。
2。分别在两个有序序列的初始位置设置两个指针。
三.比较指向两个指针的元素,在合并空间中选择一个相对较小的元素,并将指针移动到下一个位置。
4。重复步骤3,直到指针到达序列的结尾。
5。将其他序列的所有剩余元素直接复制到合并序列的尾部。

例1:

复制代码代码如下所示:

合并操作(合并)也称为合并算法,是指将两个有序序列合并为一个序列的操作。
*合并排序算法依赖于合并操作。
*
*合并行动的程序如下:
*
* 1,应用空间,因此它是两个排序序列之和,用于存储合并序列。
* 2,设置两个指针,初始位置分别是两个有序序列的起始位置。
* 3,比较指向两个指针的元素,在合并空间中选择相对较小的元素,并将指针移动到下一个位置。
* 4,重复步骤3,直到指针到达序列的结尾。
* 5,将其他序列的所有剩余元素直接复制到合并序列的尾部。
*
* /

功能归并排序(项目){
如果(items.length<2){
返回的项目;
}

var middle = math.floor(items.length / 2),
左= items.slice(0中),
右= items.slice(中),
参数=合并(mergeSort(左),归并排序(右));

params.unshift(0、项目。长度);
items.splice.apply(项目、参数);

返回的项目;

函数合并(左,右){
var结果{ },
IL=0,
IR=0;

而(IL < left.length IR <权利。长度){
如果(左{右} {右} }){
result.push(左{IL + });
{人}
Result.push(右{红外+ });
}
}
返回result.concat(left.slice(IL)),Concat(right.slice(IR));
}
}

测试
var arr = { 2, 1, 3,12, 5, 66,23, 87, 15,32 };

MergeSort(ARR);


例2:

复制代码代码如下所示:

/ / document.write(--唯一的复杂排序归并排序-一个稳定的,时间复杂度为------ );
数组=新数组(12, 25, 32,16, 18, 27,59, 69, 36);
var计数= 0;
排序的调用排序方法
/ /十三(数组,数组,0,array.length - 1);
源阵列
/ / DEST目标阵列
启动下标
/ / T靶下标
功能很多(源,dest,S,T){
var结果;
中间值

VaR复用=新的数组();
如果(s = T){
DeST {s} =源{ };
}
{其他
M = math.floor((S + T) / 2);
MSort(源,复用,S,M);
MSort(源,复用,M + 1,T);
合并(复用,dest,S,M,T);
输出
结果++ + +计数+是一种全部:;
对于(n = 0 n<VaR;dest.length;n + +){
结果
}
输出端
}
返回结果;
}

输出端
根据融合序列的两个数组
源原始数组
/ / dest排序后的数组
第一个索引
在第二个数组下的表
总长度
合并功能(源,dest,S,M,N){
用于(var = m + 1,k = s;j < s=m;k + +){
如果(源< } <源> }){
{ } = { DeST K源+ + };
}
{其他
{ } = { DeST K源J++ };
}
}

剩下的/命令一排排阵列添加到桌子底
如果(m){
对于(var l = 0;l < = s;s + +){
DeST { k+1 } = { }源+ L;
}
}
如果(j n){
对于(var l=0;l < n = j;l + +){
DeST { k+1 } = { } + L源{J}.;
}
}
}
/ / document.write()