并归排序,就是分而治之,将长的数组分解为短的数组,一直分到最后,单个单个数组,我们就认为,只有一个元素的数组是有序的。然后再逐个的合并

1、拆分: 很容易

  例如数组  [ 2,4,3,5,1,6,8,7 ];

  先拆为  [2,4,3,5]  [1,6,8,7]

再拆    [2,4] [3,5]  [1,6] [8,7]

再拆  [2] [4] [3] [5] [1] [6] [8] [7]

最后,拆分的结果,每个子数组都是有序的

2、合并,具体怎么合并,可以先来考虑一下两个有序数组的合并

                var arrA = [1,3,6,8,20,40];
var arrB = [2,5,9,10,15,26,30,50,100];
//将任意两个有序的数组,合并为一个有序数组 var i = 0,j=0,arrC = []; while(i < arrA.length && j < arrB.length){
if(arrA[i] < arrB[j]){
arrC.push(arrA[i]);
i++;
}else{
arrC.push(arrB[j]);
j++;
}
} while(i < arrA.length){
arrC.push(arrA[i]);
i++;
} while(j < arrB.length){
arrC.push(arrB[j]);
j++;
} console.log(arrC);

  那么,我对于一个数组分段的时候,可以用 low mid high,分别表示,分段的起始点,中间点,结束点 ,,这三个点,可以得到两个有序数组,进行合并

采用递归拆分,拆分为单个元素之后,合并

		//对数组  arr,从 low-mid  和 mid-high 有序合并
//相当于 arrA = arr[low:mid]; arrB = arr[mid:high]
function merge(arr,low,mid,high){
var list = [];
var i = low, j = mid+1; while(i <= mid && j <= high){
if(arr[i] <= arr[j]){
list.push(arr[i++]);
}else{
list.push(arr[j++]);
}
} while( i <= mid){
list.push(arr[i++]);
} while(j <= high){
list.push(arr[j++]);
}
var k = 0;
for(i = low; i <= high; i++){ //将排序好的list,赋值给arr
arr[i] = list[k++];
} } var mergeSort = function(arr,low,high){ //递归拆分
if(low < high){
var mid = Math.floor((low + high)/2);
mergeSort(arr,low,mid);
mergeSort(arr,mid+1,high);
merge(arr,low,mid,high); //合并
}
} var list = [5,3,6,4,8,7,10,9,2];
mergeSort(list,0,list.length-1);
console.log(list);

  

js并归排序的思路的更多相关文章

  1. JS对表格排序(支持对序号,数字,字母,日期)

    JS对表格排序(支持对序号,数字,字母,日期) 前不久看到淘宝组件有"对表格排序的插件" 如想要看 可以看这个地址 http://gallery.kissyui.com/KSort ...

  2. JS中对象排序

    详细代码如下: var s=[{name:"abc",value:10},{name:"dbc",value:5},{name:"acc", ...

  3. js函数文件排序化

    因为本人的某些小强迫症,写了一个格式化并根据js函数名排序的c++程序,此作mark #include <stdio.h> #include <map> #include &l ...

  4. js—浅谈方法和思路的重要性(首篇求大佬支持)

    js-浅谈方法和思路的重要性 学了这么久的js,我从老师的,同学的代码中发现,老师写的代码比我们的要清楚的很多,基本上没有太多累赘啊,能少的没有少啊等等..... 废话不多说,下面我们来看看这个我的一 ...

  5. 案例学习总结:原生JS实现表格排序

    最近在学习js的表格排序,没想到看不起眼的表格排序实际上却暗含了众多JS知识点.在这里记录一下此次学习过程.希望对大家也有所帮助. 完整的表格排序涉及了下列这些知识点: call方法使用 sort方法 ...

  6. [ 转载 ] js十大排序算法:冒泡排序

    js十大排序算法:冒泡排序  http://www.cnblogs.com/beli/p/6297741.html

  7. js随机数生成与排序

    'use strict'; // 排序算法. // 生成一个指定数量的不含重复数字的随机数组 function ranArr(n,callback) { var res = []; var tmp ; ...

  8. (六)js常见四大排序

    今天突然想回顾一下四大排序,虽然说在实战中没有用到,但是想回顾一下四大排序的思想   var arr = [23, 34, 11, 22, 19, 18];   1.冒泡排序: 冒泡排序的思路分析: ...

  9. js数组对象排序详解

    一.js对象遍历输出的时候真的是按照顺序输出吗? 下边就来实践一下: var obj={'3':'ccc',name:'abc',age:23,school:'sdfds',class:'dfd',h ...

随机推荐

  1. vscode 的 vue模板

    12 { "Print to console": { "prefix": "vue", "body": [ " ...

  2. Spark RDD Action 简单用例(一)

    collectAsMap(): Map[K, V] 返回key-value对,key是唯一的,如果rdd元素中同一个key对应多个value,则只会保留一个./** * Return the key- ...

  3. SmartStore.Net、NopCommerce 全局异常处理、依赖注入、代码研究

    以下是本人最近对NopCommerce和SmartStore.net部分代码的研究和总结,主要集中于:依赖注入.异常处理.对象映射.系统缓存.日志这些方面,供大家参考. NOP 3.8 /// < ...

  4. mapReducer 去重副的单词

    需求是: 统计输出某目录文件的所有单词,去除重复的单词. mapper阶段正常做map工作,映射. 切割单词. <key,value> -->  <word,nullWrita ...

  5. GregorianCalendar公里类

    使用GregorianCalendar 获得日期是年中第几周第几天 public class Common { /// <summary> /// 获取日期是年中的第几周 /// < ...

  6. [No0000E3]C# 数据类型

    在 C# 中,变量分为以下几种类型: 值类型(Value types) 引用类型(Reference types) 指针类型(Pointer types) 值类型(Value types) 值类型变量 ...

  7. PPT文件分析摘记

    将.pptx文件后缀改成.rar,然后解压 ppt文件夹下面是资源 [Content_Types].xml  展示是布局和内容说明的入口xml(显示的页面.页面对应的布局.内容.样式文件的路径),里面 ...

  8. mysql学习【第3篇】:使用DQL查询数据

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! mysql学习[第3篇]:使用DQL查询数据 DQL语言 DQL( Data Query Lan ...

  9. kafka相关命令

    查看kafka消费组对应的信息:./kafka-consumer-groups.sh --bootstrap-server 172.17.6.10:9092 --describe --group fr ...

  10. eclipse中tomcat无法加载spring boot

    转自: http://blog.csdn.net/u010797575/article/details/50517777 最近搭建一套spring boot框架,作为 application 启动项目 ...