金沙棋牌官方平台

当前位置:金沙棋牌 > 金沙棋牌官方平台 > Javascript排序算法之合并排序,归并方法

Javascript排序算法之合并排序,归并方法

来源:http://www.logblo.com 作者:金沙棋牌 时间:2019-08-31 13:33

浅谈javascript 归并方法,浅谈javascript归并

ECMAScript5 还新增了2个归并数组的方法:reduce()和reduceRight()。

 这两个都会迭代数组的所有项
        reduce():从第一项开始逐个遍历到最后。
        reduceRight():从数组的最后一项开始,遍历到数组的第一项。

这两个方法都接受两个参数:在每一项上调用的函数(参数为:前一个值,当前值,项的索引,数组对象)

 这个函数返回的任何值斗殴会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,
         因此第一个参数是数组的第一项,第二个参数是数组的第二项
         和 作为归并基础的初始值。
        使用reduce()方法可以执行数组中所有值之和的操作,比如:

复制代码 代码如下:

        var values = [1, 2, 3, 4, 5];
        var sum = values.reduce(function (prev, cur, index, array) {
            return prev cur;
        });
        alert(sum);
        //结果一样,只是方向相反而已
        var sum2=values.reduceRight(function (prev,cur,index,array) {
            return prev cur;
        });
        alert(sum2);

归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

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

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。

归并方法,浅谈javascript归并 ECMAScript5 还新增了2个归并数组的方法:reduce()和reduceRight()。 这两个都会迭代数组的所有项 reduc...

支持reduce()和reduceRight()的浏览器有:IE9 ,Firefox3 ,Safari4 ,Opeera10.5 和Chrome。

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

1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
2.设定两个指针,最初位置分别为两个已经排序序列的起始位置
3.比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
4.重复步骤3直到某一指针达到序列尾
5.将另一序列剩下的所有元素直接复制到合并序列尾

ECMAScript5 还新增了2个归并数组的方法:reduce()和reduceRight()。

<script type="text/javascript">
//document.write("----------归并排序-----复杂排序里唯一一个稳定的,时间复杂度为nlogn------<br />");
//var array = new Array(12, 25, 32, 16, 18, 27, 59, 69, 36);
var count = 0;
//调用排序方法进行排序
//mSort(array, array, 0, array.length - 1);
//source源数组
//dest目标数组
//s起始下标
//t目标下标
function mSort(source, dest, s, t) {
 var result = "";
 var m; //取中间值

示例1:

reduceRight()方法的左右类似,只不过是反向执行。例如:

示例1:

/* 输出结果结束 */
//将两个数组按照从小到大的顺序融合
//source原数组
//dest排序后的数组
金沙棋牌官方平台 ,//s第一个下标
//m第二个数组下表
//n总长度
function merge(source, dest, s, m, n) {
 for (var j = m 1, k = s; j <= n && s <= m; k ) {
   if (source[s] < source[j]) {
       dest[k] = source[s ];
     }
    else {
         dest[k] = source[j ];
       }
  }

归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。

 这两个都会迭代数组的所有项
        reduce():从第一项开始逐个遍历到最后。
        reduceRight():从数组的最后一项开始,遍历到数组的第一项。

    function merge(left, right) {
        var result = [],
            il = 0,
            ir = 0;

复制代码 代码如下:

var nums = [1,2,3,4,5];
var sum = nums.reduceRight(function(prev,cur,index,array){
 retrun pre   cur;
});

示例2:

<script type="text/javascript">
//document.write("----------归并排序-----复杂排序里唯一一个稳定的,时间复杂度为nlogn------<br />");
//var array = new Array(12, 25, 32, 16, 18, 27, 59, 69, 36);
var count = 0;
//调用排序方法进行排序
//mSort(array, array, 0, array.length - 1);
//source源数组
//dest目标数组
//s起始下标
//t目标下标
function mSort(source, dest, s, t) {
 var result = "";
 var m; //取中间值

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。

/* 输出结果结束 */
//将两个数组按照从小到大的顺序融合
//source原数组
//dest排序后的数组
//s第一个下标
//m第二个数组下表
//n总长度
function merge(source, dest, s, m, n) {
 for (var j = m 1, k = s; j <= n && s <= m; k ) {
   if (source[s] < source[j]) {
       dest[k] = source[s ];
     }
    else {
         dest[k] = source[j ];
       }
  }

    return items;

这两个方法都接受两个参数:在每一项上调用的函数(参数为:前一个值,当前值,项的索引,数组对象)

    return items;

 //将剩余排不完的有序数组加入到dest的末端
   if (s <= m) {
        for (var l = 0; l <= m - s; l ) {
         dest[k l] = source[s l];
      }
  }
 if (j <= n) {
      for (var l = 0; l <= n - j; l ) {
       dest[k l] = source[j l];
       }
 }
}
//document.write("<br /><br />")
</script>

您可能感兴趣的文章:

  • JavaScript希尔排序、快速排序、归并排序算法
  • Javascript排序算法之合并排序(归并排序)的2个例子
  • js 3种归并操作的实例代码
  • Javascript中的迭代、归并方法详解

    var middle = Math.floor(items.length / 2),
        left = items.slice(0, middle),
        right = items.slice(middle),
        params = merge(mergeSort(left), mergeSort(right));

/**
 * 合并操作(merge),也叫合并算法,指的是将两个已经排序的序列合并成一个序列的操作。
 * 合并排序算法依赖合并操作。
 *
 * 合并操作的过程如下:
 *
 * 1、申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
 * 2、设定两个指针,最初位置分别为两个已经排序序列的起始位置
 * 3、比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
 * 4、重复步骤3直到某一指针达到序列尾
 * 5、将另一序列剩下的所有元素直接复制到合并序列尾
 *
 */

这两个方法都接收两个参数:一个在每一项上调用的函数和作为归并基础的初始值。传给reduce()和reduceRight()的函数接收4个参数:前一个值,当前值,项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数就是数组的第二项。

/**
 * 合并操作(merge),也叫合并算法,指的是将两个已经排序的序列合并成一个序列的操作。
 * 合并排序算法依赖合并操作。
 *
 * 合并操作的过程如下:
 *
 * 1、申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
 * 2、设定两个指针,最初位置分别为两个已经排序序列的起始位置
 * 3、比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
 * 4、重复步骤3直到某一指针达到序列尾
 * 5、将另一序列剩下的所有元素直接复制到合并序列尾
 *
 */

示例2:

 这个函数返回的任何值斗殴会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,
         因此第一个参数是数组的第一项,第二个参数是数组的第二项
         和 作为归并基础的初始值。
        使用reduce()方法可以执行数组中所有值之和的操作,比如:

 //将剩余排不完的有序数组加入到dest的末端
   if (s <= m) {
        for (var l = 0; l <= m - s; l ) {
         dest[k l] = source[s l];
      }
  }
 if (j <= n) {
      for (var l = 0; l <= n - j; l ) {
       dest[k l] = source[j l];
       }
 }
}
//document.write("<br /><br />")
</script>

        while (il < left.length && ir < right.length) {
            if (left[il] < right[ir]) {
                result.push(left[il ]);
            } else {
                result.push(right[ir ]);
            }
        }
        return result.concat(left.slice(il)) .concat(right.slice(ir));
    }
}

    var values = [1, 2, 3, 4, 5];
    var sum = values.reduce(function (prev, cur, index, array) {
      return prev   cur;
    });
    alert(sum);
    //结果一样,只是方向相反而已
    var sum2=values.reduceRight(function (prev,cur,index,array) {
      return prev cur;
    });
    alert(sum2);

function mergeSort(items) {
    if (items.length < 2) {
        return items;
    }

归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

例如,我们可以使用reduce()方法来求数组中所有值的总和。

1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
2.设定两个指针,最初位置分别为两个已经排序序列的起始位置
3.比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
4.重复步骤3直到某一指针达到序列尾
5.将另一序列剩下的所有元素直接复制到合并序列尾

// test
var arr = [2, 1, 3, 12, 5, 66, 23, 87, 15, 32];

补充

归并操作的过程如下:

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

上面的代码中,第一次执行回调函数,prev是1,cur是2。第二次prev是3,cur是3。reduce()方法会重复这个过程,直到把数组中的每一项都访问一次,最后将返回的结果赋值给sum。

复制代码 代码如下:

复制代码 代码如下:

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

sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 归并(...

    params.unshift(0, items.length);
    items.splice.apply(items, params);

这个例子中,第一次执行回调函数,prev是5,cur是4。最后求和的结果和reduce()方法相同,都是15。

 var dest2 = new Array();
 if (s == t) {
   dest[s] = source[s];
    }
  else {
       m = Math.floor((s t) / 2);
     mSort(source, dest2, s, m);
      mSort(source, dest2, m 1 , t);
       merge(dest2, dest, s, m, t);
      /* 输出结果 */
      result = "<br />第" count "遍排序的结果是:";
   for (var n = 0; n < dest.length; n ) {
          result = array[n] ",";
        }
     /* 输出结果结束 */
 }
 return result;
}

    var middle = Math.floor(items.length / 2),
        left = items.slice(0, middle),
        right = items.slice(middle),
        params = merge(mergeSort(left), mergeSort(right));

var nums = [1,2,3,4,5];
var sum = nums.reduce(function(prev,cur,index,array){
 retrun pre   cur;
});

归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

function mergeSort(items) {
    if (items.length < 2) {
        return items;
    }

ECMAScript5为数组定义了2个归并方法:reduce()和reduceRight()。这两个方法都会迭代数组的随意项,然后构建一个最终返回的值。reduce()方法从数组的第一项开始,逐个遍历到数组的最后。reduceRight()方法则刚好相反,它从数组的最后一项开始,向前遍历到第一项。

复制代码 代码如下:

您可能感兴趣的文章:

  • javascript算法学习(直接插入排序)
  • JS折半插入排序算法实例
  • JS排序算法之冒泡排序,选择排序与插入排序实例分析
  • 基于JavaScript实现的插入排序算法分析
  • JavaScript实现经典排序算法之插入排序
  • JavaScript选择排序算法原理与实现方法示例
  • js交换排序 冒泡排序算法(Javascript版)
  • 几种经典排序算法的JS实现方法
  • Javascript中的常见排序算法
  • js实现常用排序算法
  • JavaScript插入排序算法原理与实现方法示例

    params.unshift(0, items.length);
    items.splice.apply(items, params);

mergeSort(arr);

mergeSort(arr);

归并操作的过程如下:

// test
var arr = [2, 1, 3, 12, 5, 66, 23, 87, 15, 32];

 var dest2 = new Array();
 if (s == t) {
   dest[s] = source[s];
    }
  else {
       m = Math.floor((s t) / 2);
     mSort(source, dest2, s, m);
      mSort(source, dest2, m 1 , t);
       merge(dest2, dest, s, m, t);
      /* 输出结果 */
      result = "<br />第" count "遍排序的结果是:";
   for (var n = 0; n < dest.length; n ) {
          result = array[n] ",";
        }
     /* 输出结果结束 */
 }
 return result;
}

        while (il < left.length && ir < right.length) {
            if (left[il] < right[ir]) {
                result.push(left[il ]);
            } else {
                result.push(right[ir ]);
            }
        }
        return result.concat(left.slice(il)) .concat(right.slice(ir));
    }
}

    function merge(left, right) {
        var result = [],
            il = 0,
            ir = 0;

本文由金沙棋牌发布于金沙棋牌官方平台,转载请注明出处:Javascript排序算法之合并排序,归并方法

关键词: