js并归排序的思路
并归排序,就是分而治之,将长的数组分解为短的数组,一直分到最后,单个单个数组,我们就认为,只有一个元素的数组是有序的。然后再逐个的合并
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并归排序的思路的更多相关文章
- JS对表格排序(支持对序号,数字,字母,日期)
JS对表格排序(支持对序号,数字,字母,日期) 前不久看到淘宝组件有"对表格排序的插件" 如想要看 可以看这个地址 http://gallery.kissyui.com/KSort ...
- JS中对象排序
详细代码如下: var s=[{name:"abc",value:10},{name:"dbc",value:5},{name:"acc", ...
- js函数文件排序化
因为本人的某些小强迫症,写了一个格式化并根据js函数名排序的c++程序,此作mark #include <stdio.h> #include <map> #include &l ...
- js—浅谈方法和思路的重要性(首篇求大佬支持)
js-浅谈方法和思路的重要性 学了这么久的js,我从老师的,同学的代码中发现,老师写的代码比我们的要清楚的很多,基本上没有太多累赘啊,能少的没有少啊等等..... 废话不多说,下面我们来看看这个我的一 ...
- 案例学习总结:原生JS实现表格排序
最近在学习js的表格排序,没想到看不起眼的表格排序实际上却暗含了众多JS知识点.在这里记录一下此次学习过程.希望对大家也有所帮助. 完整的表格排序涉及了下列这些知识点: call方法使用 sort方法 ...
- [ 转载 ] js十大排序算法:冒泡排序
js十大排序算法:冒泡排序 http://www.cnblogs.com/beli/p/6297741.html
- js随机数生成与排序
'use strict'; // 排序算法. // 生成一个指定数量的不含重复数字的随机数组 function ranArr(n,callback) { var res = []; var tmp ; ...
- (六)js常见四大排序
今天突然想回顾一下四大排序,虽然说在实战中没有用到,但是想回顾一下四大排序的思想 var arr = [23, 34, 11, 22, 19, 18]; 1.冒泡排序: 冒泡排序的思路分析: ...
- js数组对象排序详解
一.js对象遍历输出的时候真的是按照顺序输出吗? 下边就来实践一下: var obj={'3':'ccc',name:'abc',age:23,school:'sdfds',class:'dfd',h ...
随机推荐
- ssm文件配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- vue进阶用法-深入响应式原理
异步更新队列 当vue异步执行更新DOM时,只要观察到数据变化,vue经开启一个队列,并缓冲在同一时间循环中发生的所有数据改变.如果同一个watch被多次触发,只会一次推入到队列中.然后在下一个事件循 ...
- .NET Core下的Socket示例.
About.schtml中的代码 @{ ViewData["Title"] = "About"; } <h2>@ViewData["Tit ...
- 启用hive hwi方法
hive启动hwi: ./hive --service hwi ls: cannot access /opt/cdh-5.3.6/hive-0.13.1/lib/hive-hwi-*.war: No ...
- arcgis二次开发遇到System.Runtime.InteropServices.COMException (0x80040228) :异常来自HRESULT:0x80040228
出现此问题只需要在控件上拖入一个LicenseControl就可以了 参考资料:http://yaogu.blog.163.com/blog/static/1849990662012101283256 ...
- 【实战解析】基于HBase的大数据存储在京东的应用场景
京东技术 https://mp.weixin.qq.com/s?src=11×tamp=1551342955&ver=1455&signature=0hYp8OsxY ...
- python导入方法,软件目录
软件目录 import os #print(__file__)#打印当前文件相对路径(文件,发要) import sys BASE_DIR=os.path.dirname(os.path.dirnam ...
- LeetCode 463 Island Perimeter 解题报告
题目要求 You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 rep ...
- 知乎改版api接口之scrapy自动登陆
最近使用scrapy模拟登陆知乎,发现所有接口都发生变化了,包括验证码也发生了很大变化,通过抓包分析,记录下改版后的知乎模拟登陆,废话不多说,直接上代码,亲测有效 # -*- coding: utf- ...
- Too many connections解决方法
在工作中,大家或许常常遇到Too many connections这个错误,这时作为DBA想进数据库管理都进不去,是非常尴尬的一件事情.当然有同学说可以修改配置文件,但是修改配置文件是需要重启mysq ...