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 ...
随机推荐
- MySQL主从同步添加至zabbix监控
参考文档:https://blog.csdn.net/hellowidow_2020/article/details/78985368 https://www.cnblogs.com/cdjia ...
- novnc安装教程
适配于centos7 1.安装vncserver # stop selinux and iptables setenforce systemctl stop firewalld systemctl d ...
- 多线程 ForkJoinPool
阅读目录 使用 背景:ForkJoinPool的优势在于,可以充分利用多cpu,多核cpu的优势,把一个任务拆分成多个“小任务”,把多个“小任务”放到多个处理器核心上并行执行:当多个“小任务”执行完成 ...
- Page6:关于能控性、能观性、能测性及其判据(1)[Linear System Theory]
内容包含能控性和能测性的定义,连续时间线性时不变系统能控性和能观测性判据
- [daily][archlinux][game] 几个linux下还不错的游戏
春节在家放松, 装了几个游戏在archlinux上,玩起来还不错. 假期结束开工了, 玩的时间也会比较少,准备删掉, 记录如下: 1. 0ad 即时战略类, 类似于冷兵器时代的红警. 画面还不错, 可 ...
- Flink – Stream Task执行过程
Task.run if (invokable instanceof StatefulTask) { StatefulTask op = (StatefulTask) invokable; op.set ...
- Flink - FlinkKafkaConsumer010
Properties properties = new Properties(); properties.setProperty("bootstrap.servers", &quo ...
- zookeeper 杂记
Zookeeper为了保证高吞吐和低延迟,在内存中维护了这个树状的目录结构,这种特性使得Zookeeper不能用于存放大量的数据,每个节点的存放数据上限为1M.
- ORACLE INSTANCE与EM系统
Emctl start dbconsole https://192.168.183.132:1158/em/ 复制到游览器进入到em 更改初始化参数值 静态参数: -只能在参数文件中更改 -必须重新启 ...
- Glide加载图片报错You must not call setTag() on a view Glide is targeting
报错信息为:You must not call setTag() on a view Glide is targeting 原因就是View使用setTag后导致Glide之前请求的标记被清除,强制转 ...