美文网首页
归并排序

归并排序

作者: CircleLee | 来源:发表于2019-01-28 18:00 被阅读6次

归并排序( Merging Sort) 就是利用归并的思想实现的排序方法。它的原理是假设初始序列含有n 个记录, 则可以看成是n个有序的子序列,每个子序列的长度为1然后两两归并,得到【n/2】个长度为2或1 的有序子序列; 再两两归并,……,如此重复, 直至得到一个长度为n 的有序序列为止,这种排序方法称为2 路归并排序。


 private static void merged(int[] list, int low, int mid, int high) {
   int i = low;  //第一段序列初始下标
   int j = mid + 1;  //第二段序列初始下标
   //临时存放数组
   int k = 0;
   int[] array = new int[high - low + 1];

   //遍历第一段很第二段序列,直到有一段序列扫描完毕
   //注:这里第一段序列和第二段序列已经是有序数列
   while (i<=mid && j<= high) {
       //将第一段和第二段中,更小的数存放到临时数组中
       if (list[i] <= list[j]) {
           array[k] = list[i];
           i++;
           k++;
       } else {
           array[k] = list[j];
           j++;
           k++;
       }
   }
   //直到其中一段遍历完毕,另一端剩下的数字直接赋值到临时数组中
   while (i <= mid) {
       array[k] = list[i];
       i++;
       k++;
   }

   while (j <= high) {
       array[k] = list[j];
       j++;
       k++;
   }

   //将合并序列复制到原始序列中
   for (k=0, i=low; i<=high; i++, k++ ) {
       list[i] = array[k];
   }
}

private static void mergedPass(int[] list, int gap, int length) {
   int i = 0;
   // 归并gap长度的两个相邻子表
   for (i=0; i+2*gap-1<length; i=i+2*gap) {
       merged( list, i, i+gap-1, i+2*gap-1 );
   }
   // 余下两个子表,后者长度小于gap
   if (i+gap-1 < length) {
       merged( list, i, i+gap-1, length-1 );
   }
}

private static void mergingSort(int[] list) {
   for (int gap=1; gap<list.length; gap=2*gap) {
       mergedPass( list, gap, list.length );
   }
}

public static void main(String[] args) {
    int[] list = {9,1,5,3,4,2,6,8,7};
    mergingSort(list);
    System.out.print( "Merging Sort: ");
    for (int i=0; i<list.length; i++) {
        System.out.print( list[i] + ", " );
    }
}

相关文章

  • 排序算法

    约定 选择排序 冒泡排序 插入排序 希尔排序 归并排序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/rdfzjqtx.html