/*********************************************JS归并排序***************************************************/
 
/*之前学习了一下归并算法,现在想把他分享给大家*/

/*
 * 归并排序,分开数组,不断一分为二直到只剩一个元素(这里用到递归思想,不断自己分开自己), 
 * 然后对分开的自己进行排序,在归并的路上不断排序,从而实现最终排序
 * 时间复杂度O(NlogN)
 * 它的速度仅次于快速排序,而且很稳定
 * 但是空间需求一般会高点,大型的项目或者数据均为有序的时候用归并排序会多点
 */
function mergeSort(arr) {               //我们先在主函数中定义分离方法,最后在结果中调用排序算法
    if(arr.length === 1){               //定义递归终止条件,当元素均为1个时,开始归并
        return arr ;
    }
    let mid = Math.floor((arr.length)/2);       //Math.floor用以寻找当前给的数,如果没有则向下寻找最近的
    let left = arr.slice(0,mid);                //调用slice方法来返回数组,其不改变原数组
    let right = arr.slice(mid);
    return rank(mergeSort(left),mergeSort(right));      //递归用在了这里
}
function rank(left,right) {
    let result = [];                                            //定义容器
    let pl = 0,                                                 //定义两个指针
        pr = 0;
    
    while(pl < left.length && pr < right.length){    //两个数组只要都同时有数,就进行循环
        if(left[pl] < right[pr]){                    //这里的两个数组必然是都已经排序完成了,互相比较即可
            result.push(left[pl]);
            pl++;                                    //谁添加了数组元素,谁就移动一下自己的指针,所以这里用while不用for
        }else{
            result.push(right[pr]);
            pr++;
        }
    }
    while(pl < left.length){                         //上面循环结束的条件是有一个数组循环结束了
        result.push(left[pl]);                       //他们俩不可能同时有数,所以不管谁剩了,统统添加进去
        pl++;
    }
    while(r < right.length){
        result.push(right[pr]);
        pr++;
    }
    return result;
}
console.log(mergeSort([2,58,5,6,5,89,38]))

基于JS实现归并排序算法的更多相关文章

  1. 常见排序算法基于JS的实现

    一:冒泡排序 1. 原理 a. 从头开始比较相邻的两个待排序元素,如果前面元素大于后面元素,就将二个元素位置互换 b. 这样对序列的第0个元素到n-1个元素进行一次遍历后,最大的一个元素就“沉”到序列 ...

  2. JavaScript基于时间的动画算法

    转自:https://segmentfault.com/a/1190000002416071 前言 前段时间无聊或有聊地做了几个移动端的HTML5游戏.放在不同的移动端平台上进行测试后有了诡异的发现, ...

  3. 转载~基于比较的排序算法的最优下界为什么是O(nlogn)

    基于比较的排序算法的最优下界为什么是O(nlogn) 发表于2013/12/21 16:15:50  1024人阅读 分类: Algorithm 1.决策二叉树 回答这个问题之前我们先来玩一个猜数字的 ...

  4. 归并排序算法 java 实现

    归并排序算法 java 实现 可视化对比十多种排序算法(C#版) [直观学习排序算法] 视觉直观感受若干常用排序算法 算法概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Di ...

  5. 基于JS功能强大的日期插件Kalendae

    开发中需要一个日期插件,可以在zepto下使用,可以选择日期段,可以设置不可选日期 找到一个完全满足的,并且基于JS不依赖于任何库. 在线演示:http://chipersoft.com/Kalend ...

  6. 必须知道的八大种排序算法【java实现】(三) 归并排序算法、堆排序算法详解

    一.归并排序算法 基本思想: 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并 ...

  7. Breach - HTML5 时代,基于 JS 编写的浏览器

    Breach 是一款属于 HTML5 时代的开源浏览器项目,,完全用 Javascript 编写的.免费.模块化.易于扩展.这个浏览器中的一切都是模块,Web 应用程序在其自己的进程运行.通过选择合适 ...

  8. 最小生成树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind

    最小支撑树树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind 最小支撑树树 前几节中介绍的算法都是针对无权图的,本节将介绍带权图的最小 ...

  9. mahout入门指南之基于mahout的itembased算法

    基于mahout的itembased算法 事实上mahout分布式上仅仅是实现了部分算法.比方推荐算法中Item-based和slopone都有hadoop实现和单机版实现,User-based没有分 ...

随机推荐

  1. RocketMQ(消息重发、重复消费、事务、消息模式)

    分布式开放消息系统(RocketMQ)的原理与实践 RocketMQ基础:https://github.com/apache/rocketmq/tree/rocketmq-all-4.5.1/docs ...

  2. 小程序 scroll-view 左右横向滑动没有效果(无法滑动)问题

    scroll-view 中的需要滑动的元素不可以用 float 浮动:

  3. 关于css中浮动的理解及实际应用

    一.元素浮动的意义及使用:1. 浮动的意义:设置了浮动属性的元素会脱离普通标准流的控制,移动到其父元素中指定的位置的过程,将块级元素放在一行,浮动会脱离标准流,不占位置,会影响标准流,浮动只有左右浮动 ...

  4. vue-learning:0 - 目录

    Vue-learning vue.js学习路径 Vue的API地图 点击查看vue的API地图 视图层 点击可直接到达详情页面 指令 {{ }} / v-html v-if / v-else / v- ...

  5. 2018-8-10-resharper-跳转到源代码

    title author date CreateTime categories resharper 跳转到源代码 lindexi 2018-08-10 19:16:52 +0800 2018-2-13 ...

  6. 一个简单的Web服务器-支持Servlet请求

    上接 一个简单的Web服务器-支持静态资源请求,这个服务器可以处理静态资源的请求,那么如何处理Servlet请求的呢? 判断是否是Servlet请求 首先Web服务器需要判断当前请求是否是Servle ...

  7. F5 LTM旁路配置四层负载

    网络拓扑图如下: 如上图所示,其中LTM和web1,web2处于同一网络中,外部的client访问请求后端的服务的时候,通过F5 LTM的VS地址,将实际的请求分配到后端两台服务web1和web2上 ...

  8. Python之end关键字使用

    关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符,实例如下: a, b = 0, 1 while b < 1000: print(b, end=',') a, b = b, ...

  9. python列表的增删查改

    添加新的元素 append() insert() extend() +号 删除元素 pop() remove() del xxx[index] 修改 xxx[index] = value 查找 in. ...

  10. 我的 2019 年 Python 文章榜单

    现在是 2020 年的第一天,我相信从昨天开始,各位的信息流里肯定充斥了各式各样的年度盘点/回顾/总结/记录之类的内容.虽然来得稍晚了,但我还是想给诸位送上这一篇文章. 我将在本文中列出自己于 201 ...