本文主要介绍两个Javascript排序算法的合并排序(merge sort)的例子,有需要的朋友可以参考一下。
归并排序是一种基于归并操作的有效排序算法。这个算法是分而治之的典型应用。
归并排序法是将两个(或两个以上)有序表归并成一个新的有序表,即把要排序的序列分成若干个子序列,每个子序列都是有序的。然后将有序子序列合并成完整的有序序列。
Merge是一种基于归并操作的有效排序算法。这个算法是分而治之的典型应用。组合有序子序列以获得完全有序的序列;也就是说,首先对每个子序列进行排序,然后对子序列段进行排序。如果两个有序表合并成一个有序表,称为双向合并。
合并的过程如下:
1.申请一个大小为两个排序序列之和的空间,用来存放合并后的序列。2.设置两个指针,指针的初始位置是两个排序序列的起始位置。3.比较两个指针指向的元素,选择相对较小的元素放入合并空间,将指针移动到下一个位置。4.重复步骤3,直到一个指针到达序列的末尾。5.将另一个序列的所有剩余元素直接复制到合并序列的末尾。
示例1:
复制代码如下:/* * *合并运算(也叫归并算法)是指将两个排序后的序列合并成一个序列的运算。*合并排序算法取决于合并操作。* *合并操作的过程如下:** 1。申请一个大小为两个排序序列之和的空间。这个空间用于存储合并的序列。* 2.设置两个指针,其初始位置是两个排序序列的起始位置。* 3.比较两个指针指向的元素,选择一个相对较小的元素放入合并空间,将指针移动到下一个位置。* 4.重复步骤3,直到指针到达。
函数merge sort(items){ if(items . length 2){ return items;}
var middle=math . floor(items . length/2),left=items.slice(0,中间),right=items.slice(中间),params=merge(mergeSort(左),mergeSort(右));
params.unshift(0,items . length);items.splice.apply(items,params);
退货项目;
函数merge(left,right) { var result=[],il=0,IR=0;
while(il left . length IR right . length){ if(left[il]right[IR]){ result . push(left[il]);} else { result . push(right[IR]);} }返回result.concat(left.slice(il))。concat(右切片(IR));}}
//testvar arr=[2,1,3,12,5,66,23,87,15,32];
合并排序(arr);
示例2:
复制代码如下:script type=' text/JavaScript '//document . write('-//var Array=new Array(12,25,32,16,18,27,59,69,36);var count=0;//调用sort方法进行排序//m sort (array,array,0,array . length-1);//源数组//目标数组//s开始下标//t目标下标函数msort (source,dest,s,t){ var result=' ';var m;//取中间值
var dest 2=new Array();if(s==t){ dest[s]=source[s];} else { m=math . floor((s t)/2);mSort(source,dest2,s,m);mSort(source,dest2,m 1,t);merge(dest2,dest,s,m,t);/* Output result */result=' br/通过“count”次排序的结果是:';for(var n=0;目标长度;n ) { result=array[n]',';}/*输出结果结束*/}返回结果;}
/*输出结果结束*//按照从小到大的顺序合并两个数组。//source原始数组//dest排序数组//s第一个下标//m第二个数组如下表所示//n总长度函数Merge (source,dest,s,m,n) {for (var j=m 1,k=s;j=n s=m;k){ if(source[s]source[j]){ dest[k]=source[s];} else { dest[k]=source[j];}}
//将剩余排不完的有序数组加入到建筑环境及(同high-voltagealternatingcurrent)高压交互电流系统模拟的软件平台的末端if(s=m){ for(var l=0;l=m-s;l){ dest[k l]=source[s l];} } if(j=n){ for(var l=0;l=n-j;l){ dest[k l]=source[j l];} } }//doc。编写(' br/br/')/脚本
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。