美文网首页
归并排序

归并排序

作者: mengxr | 来源:发表于2017-06-06 17:48 被阅读8次

背景

  • Array.prototype.sort的实现,不同浏览器有不同的算法实现
  • chrome使用的快排
  • Firefox使用的归并排序

归并排序

  • 是一种稳定的排序算法O(nlogn)
  • 核心原理
  • 有效的排列两个有序数组
  • [5,4,1,22]&&[12,32,45,21]
var tmp = [];
var left = [5,4,1,22];
var right = [12,32,45,21];
//对两个有序数组的第一个进行大小比较
//将小的推入tmp,并在原数组中删除
//这样的结果是在进行2*length比较之前就有一个数组长度为0,跳出比较
//tmp中存在的是有序的小值
//长度不为0的数组中还存在的是有序的大值
//将两者合并返回新的有序数组
while(left.length && right.length){
    if(left[0]<right[0]){
       tmp.push(left.shilf());
    } else {
       tmp.push(right.shift());
    }
}
return tmp.concat(left, right)
  • 完整代码
  function merge(left, right) {
      var tmp = [];

      while (left.length && right.length) {
        if (left[0] < right[0])
          tmp.push(left.shift());
        else
          tmp.push(right.shift());
      }
      return tmp.concat(left, right);
  }

  function mergeSort(a) {
      if (a.length === 1) 
        return a;

      var mid = ~~(a.length / 2)
        , left = a.slice(0, mid)
        , right = a.slice(mid);

      return merge(mergeSort(left), mergeSort(right));
  }
  • 核心原理的基础上加入递归思想

快速排序


稳定算法VS不稳定算法

  • 什么是算法稳定性
  • 两个相等的数,排序前排序后前后位置不变
  • 稳定算法
  • 冒泡排序
  • 归并排序
  • 不稳定算法
  • 快速排序
  • 选择排序
  • 不稳定算法出现问题场景
   某市的机动车牌照拍卖系统,最终中标的规则为:

   1. 按价格进行倒排序;
   2. 相同价格则按照竞标顺位(即价格提交时间)进行正排序。
   排序若是在前端进行,那么采用快速排序的浏览器中显示的中标者很可能是不符合预期的

相关文章

  • 排序算法

    约定 选择排序 冒泡排序 插入排序 希尔排序 归并排序1. 归并方法2. 自顶向下归并排序3. 自底向上归并排序 ...

  • 排序二:归并、快排

    文章结构 归并排序 快速排序 源码 1. 归并排序 1.1 什么是归并排序 归并排序的思想是:将待排序的区间平分成...

  • java归并排序

    归并排序什么是归并排序:图解归并排序归并排序有两种实现方式,一是基于递归,而是基于迭代1)基于递归的归并排序: 基...

  • 算法—排序篇2

    1、归并排序(Merging Sort) 归并排序(Merging Sort): 就是利用归并的思想实现排序⽅法....

  • 常见的排序算法(2)

    要点 快速排序 归并排序 1.快速排序 2.归并排序

  • 排序算法之归并排序

    归并排序(Merge Sort) 归并排序是利用归并的思想实现排序的方式,该算法采用的是经典的分治算法 归并排序过...

  • 算法 第二章第二部分笔记

    各种排序算法的性能特点 选择排序 插入排序 希尔排序 归并排序 本地归并排序 自底向上的归并排序 快速排序 三向切...

  • 归并排序(二路归并排序)

    归并排序的思路 归并排序是通过“归并”操作完成排序的,将两个或者多个有序子表归并成一个子表。归并排序是“分治法”的...

  • 算法排序之归并排序和快速排序

    归并排序和快速排序用的都是分治的思想,用递归的编程技巧来实现.咱们先来看归并排序. 归并排序 归并排序的核心思想就...

  • 基于左闭右开的乱序数组归并排序 2020-04-24(未经允许,

    归并排序代码模板 递归形式思路:二分nums数组后对nums的归并排序 = 对左侧数组归并排序+对右侧数组归并排序...

网友评论

      本文标题:归并排序

      本文链接:https://www.haomeiwen.com/subject/shxnfxtx.html