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 ...
随机推荐
- 导航+左侧菜单+tab切换模板
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...
- Python2.7编译失败 Failed to build these modules:_curses_panel _hashlib _ssl
1:*** WARNING: renaming "_ssl" since importing it failed: libssl.so.1.0.0: cannot open sha ...
- Ansible自动化运维之介绍安装与简单使用
参考:http://blog.51cto.com/191226139/2066936 Ansible是什么 Ansible 简单的说是一个配置管理系统(configuration management ...
- poj1734 Sightseeing trip【最小环】
Sightseeing trip Time Limit: 1000MS Memory Limit: 65536K Total Submissions:8588 Accepted:3224 ...
- 若父设置了overflow: hidden;子如何不受影响
若父设置了overflow: hidden;子如何不受影响 1.如图: 2.只需要给一个position: absolute;定位 3.相当于重新给页面进行定位,右侧便会有滚动条出现. 4.overf ...
- background属性解释
如background: url(images/img1.jpg) no-repeat 0 0; 其中的 0 0,前一个是横坐标上的数,后一个表示纵坐标上的数,而很神奇的是,作为参考的坐标原点不是永远 ...
- iOS 精简Controlelr代码的两个方法
MVC是苹果推荐使用的iOS APP架构.后来又有MVVM,MVP等架构出现.主要目的是让业务逻辑.展示.数据各个层级解耦.实现最大程度上的代码复用. 对MVC这种架构来说,随着APP中模的增多,控制 ...
- NULL - AUTO_INCREMENT
http://dev.mysql.com/doc/refman/5.7/en/create-table.html Data Types and Attributes for Columns data_ ...
- HZAU2018年十大阅读之星演讲稿
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
- day1_jmeter接口测试
一.Jmeter-http接口脚本: 步骤: 1.添加线程组 2.添加http请求 3.在http请求中写入接口url.路径.请求方式.参数 4.添加查看结果树 5.调用接口.查看返回值 二.Jmet ...