前端-二路归并排序

  1. 二路归并排序: 分治法思想 (稳定)

    • 思想: 将两个或者两个以上的有序表合并成为一个有序表.
    • 假定待排序表中有n个记录, 将其看成是n个有序的子表, 每个表的长度为1, 然后两两归并, 得到[n/2]个长度为2或者1的有序表, 然后在两两归并...如此重复
  2. 时间复杂度: nlog(2n)

const arr_temp = [];

/*
  合并数组low~mid, mid+1~high, 同时对其进行排序后合并
 */
function merge(arr, low, mid, high) {
  // 将arr中的所有元素复制到arr_temp中
  for (var k = low; k <= high; k++) {
    arr_temp[k] = arr[k];
  } // end for
  // i前半部分数组索引  j后半部分数组索引  k最后处理后数据数组索引
  for (var i = low, j = mid + 1, k = i; i <= mid && j <= high; k++) {
    if (arr_temp[i] <= arr_temp[j]) {
      arr[k] = arr_temp[i++]
    } else {
      arr[k] = arr_temp[j++]
    }
  } // end for

  // 前半部分的长度大于后半部分
  while (i <= mid) {
    arr[k++] = arr_temp[i++];
  }

  // 后半部分的长度大于前半部分
  while (j <= high) {
    arr[k++] = arr_temp[j++];
  }
}

function MergeSort(A, low, high) {
  if (low < high) {
    const mid = parseInt((low + high) / 2);
    MergeSort(A, low, mid);
    MergeSort(A, mid + 1, high);
    merge(A, low, mid, high);
  }
}

const a = [5, 2, 4, 3, 8, 6, 9, 0, 1, 7];
MergeSort(a, 0, a.length - 1)
console.log(a)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 6,074评论 0 13
  • 概述 因为健忘,加上对各种排序算法理解不深刻,过段时间面对排序就蒙了。所以决定对我们常见的这几种排序算法进行统一总...
    清风之心阅读 727评论 0 1
  • 花木兰 16 岁 女 生活在王者峡谷市中心(剩下的文中慢慢介绍) 兰陵王 18 岁 男 生活在郊区(同上)
    离䊾阅读 134评论 0 0
  • 豆瓣向来是一块神奇的领土,从豆瓣网红、一众写手的争奇斗艳,到能评出怪力乱神的超高分和匪夷所思的超低分的豆瓣电影,这...
    愚乐观茬家阅读 685评论 1 5
  • 今日用两个双黄蛋做秋葵煎蛋,味道不错,配小米粥吃。(^O^) 在超市买了9个刚开箱的鸡蛋,头3个都是双黄。\(//...
    SophieRealWorld阅读 288评论 0 1