function merge(s_arr, d_arr, start, middle, end){
  var s_temp = start;
  var m_temp = middle+1;
  var temp;
  var d = start;
  for(;s_temp <= middle && m_temp <= end; d++){
    if(s_arr[s_temp] < s_arr[m_temp]){
      d_arr[d] = s_arr[s_temp];
      s_temp++;
    }else{
      d_arr[d] = s_arr[m_temp];
      m_temp++;
    }
  }
  if(s_temp <= middle){
    for(temp = 0;temp <= middle -s_temp; temp++){
      d_arr[d + temp] = s_arr[s_temp + temp];
    }
  }
  if(m_temp <= end){
    for(temp = 0;temp <= end -m_temp; temp++){
      d_arr[d+temp] = s_arr[m_temp + temp];
    }
  }
}
// var arr1 = [1, 4, 8, 10, 2, 5, 9, 11];
// var arr2 = [];
// merge(arr1, arr2, 0, 1, 2);
function merge_sort(arr){
  sort_merge(arr, arr, 0, arr.length-1);
}
function sort_merge(s_arr, d_arr, start, end){
  if(start == end){
    d_arr[start] = s_arr[start];
  }else{
    var m = parseInt((start + end)/2);
//console.log(m);
    sort_merge(s_arr, d_arr2, start, m);
    sort_merge(s_arr, d_arr2, m + 1, end);
    merge(d_arr2, d_arr,start, m, end);
  }
}
merge_sort(arr)
console.log(arr);

归并排序要点

1.将要排序的数组递归的进行切分为start,middle,end三部分

2.将排好序的start-middle与middle-end合并为一个数组

function merge_sort(arr){
_sort_merge(arr, arr, 0, arr.length -1);
} function _sort_merge(src, desc, start, end){
var tmp_arr = [];
if(start == end){
desc[start] = src[start];
}else{
var m = parseInt((start + end)/2);
_sort_merge(src, tmp_arr, start, m);
_sort_merge(src, tmp_arr, m + 1, end);
merge(tmp_arr, desc, start, m, end);
}
} function merge(src, desc, start, m, end){
var i = start,j = m + 1, index = start;
while(i <= m && j <= end){
if(src[i] > src[j]){
desc[index] = src[i];
index++;
i++;
}else{
desc[index] = src[j];
index++;
j++;
}
}
while(i <= m){
desc[index] = src[i];
index++;
i++;
}
while( j <= end){
desc[index] = src[j];
index++;
j++;
}
}
var arr = [22, 31, 1, 9, 99, 68, 55, 30];
merge_sort(arr);
console.log(arr);

js实现归并排序的更多相关文章

  1. 基于JS实现归并排序算法

    /*********************************************JS归并排序************************************************ ...

  2. javascript排序 查找算法大全

    在pptv的实习结束了, 忙着找工作的事,顺便把数据结构的那本书重新复习了一遍.为了加深印象,特意把里面的常用的排序.查找算法用js写了一遍 具体的实例在我的github上,大家可以访问的: http ...

  3. js归并排序

    js归并排序 function mergeSort (arr){ if (arr.length < 2){ //控制语句,结束递归 return arr; } var middle = Math ...

  4. js排序算法04——归并排序

    归并排序是一种分治算法.思想是把原数组切分成较小的数组,直到每个小数组只有一个位置,再将小数组归并成较大的数组,直到最后有一个完整有序的大数组. js实现如下: function mergeSort( ...

  5. 归并排序算法及其JS实现

    归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(con ...

  6. js实现冒泡排序(bubble sort)快速排序(quick sort)归并排序(merge sort)

    排序问题相信大家都比较熟悉了.用js简单写了一下几种常用的排序实现.其中使用了es6的一些语法,并且不仅限于数字--支持各种类型的数据的排序.那么直接上代码: function compare (a, ...

  7. 使用 js 实现十大排序算法: 归并排序

    使用 js 实现十大排序算法: 归并排序 归并排序 refs js 十大排序算法 All In One https://www.cnblogs.com/xgqfrms/p/13947122.html ...

  8. JS快速排序 希尔排序 归并排序 选择排序

    /* 快速排序 1.1 算法描述 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用.快速排序是一种既不浪费空间又可以快一 ...

  9. js 实现排序算法 -- 归并排序(Merge Sort)

    原文: 十大经典排序算法(动图演示) 归并排序 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得 ...

随机推荐

  1. LinkButton(按钮)

    使用$.fn.linkbutton.defaults重写默认值对象. 按钮组件使用超链接按钮创建.它使用一个普通的<a>标签进行展示.它可以同时显示一个图标和文本,或只有图标或文字.按钮的 ...

  2. rop框架签名功能控制

    平台级控制: 通过<rop:annotation-driven/>的 sign-enable 属性即可开启或关闭服务平台签名验证功能:<rop:annotation-driven s ...

  3. [HDU 4089]Activation[概率DP]

    题意: 有n个人排队等着在官网上激活游戏.Tomato排在第m个. 对于队列中的第一个人.有以下情况: 1.激活失败,留在队列中等待下一次激活(概率为p1) 2.失去连接,出队列,然后排在队列的最后( ...

  4. js正则验证手机号

    var regp = /^(\+86|86|)1[3458][0-9]{9}$/; if(str==""){ var flag = checkstatus(obj,"&q ...

  5. PHP- Windows无法在本地计算机启动Apache的解决方法

    装好了WAMP,开始可以进行我的PHP学习了.可是装后却打不开locahost. 百度后如下解决了:"Windows不能在本地计算机启动Apache2.有关更多信息,查阅系统事件日志.如果这 ...

  6. 对.NET的认识

    .NET其实就是一个软件平台,这个平台和Java平台有许多的相似之处,主要表现在 1.二者编写的程序都是可以跨平台执行的   2.二者编写的程序编译后生成的都是一种中间码(IL),需要经过第二次编译才 ...

  7. NET程序的破解--静态分析(Xenocode Fox 2006 Evaluation)

    NET程序已经红红火火的兴起,就象LINUX一样势不可挡的涌来.作为一名Cracker,你会选择躲避吗?嘿嘿,对俺而言,挑战更富有趣味. 破解好几个.NET的程序了,一直想写出来,只是时间问题,所以拖 ...

  8. [前端JS学习笔记]JavaScript prototype 对象

    一.概念介绍 prototype 对象 : 原型对象.在JavaScript中, 每一个对象都继承了另一个对象,后者称为"原型对象". 只有 null 除外,它没有自己的原型对象. ...

  9. linux中crontab实现以秒执行任务

    用crontab+sleep实现以秒执行任务 crontab -e * * * * * /bin/date >>/tmp/date.txt * * * * * sleep 10s; /bi ...

  10. Android Studio安装及主题字体配置

    在2013 Google I/O 大会上,谷歌推出了自家全新的安卓软件集成开发工具 Android Studio,这是 Google 基于 IntelliJ IDEA 改动而来. 谷歌称 Androi ...