美文网首页Android开发Android技术知识Android进阶之路
Java常见排序算法详解——归并排序

Java常见排序算法详解——归并排序

作者: Demo_Yang | 来源:发表于2019-04-12 17:54 被阅读2次

概念:

归并排序Merge Sort
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的典型应用。
它指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。归并排序有多路归并排序、两路归并排序 , 可用于内排序,也可以用于外排序。这里仅对内排序的两路归并方法进行讨论。

原理:

  1. 把 n 个记录看成 n 个长度为 l 的有序子表
  2. 进行两两归并使记录关键字有序,得到 n/2 个长度为 2 的有序子表
  3. 重复第 2 步直到所有记录归并成一个长度为 n 的有序表为止。
    图解:列如我们有个数组[29 4 11 10 5 7 99 66] 用归并排序按照从小到大排序
    首先,我们先将数组分为长度为2的子数组,然后对每个子数组进行排序
[29  4]  [11  10]  [5  7]  [99  66]
   ↓        ↓         ↓       ↓
[4  29]  [10 11]   [5  7]  [66 99]

然后再两两合并

[4 29 10 11]  [5 7 66 99]
      ↓             ↓
[4 10 11 29]  [5 7 66 99]

最后,再将这两个子数组合并

[4 10 11 29 5 7 66 99]
            ↓
[4 5 7 10 11 29 66 99]

代码实现:

 public  void mergesort() {
        int[] orderedArr = new int[array.length];
        for (int i = 2; i < array.length * 2; i *= 2) {
            for (int j = 0; j < (array.length + i - 1) / i; j++) {
                int left = i * j;
                int mid = left + i / 2 >= array.length ? (array.length - 1) : (left + i / 2);
                int right = i * (j + 1) - 1 >= array.length ? (array.length - 1) : (i * (j + 1) - 1);
                int start = left, l = left, m = mid;
                while (l < mid && m <= right) {
                    if (array[l] < array[m]) {
                        orderedArr[start++] = array[l++];
                    } else {
                        orderedArr[start++] = array[m++];
                    }
                }
                while (l < mid)
                    orderedArr[start++] = array[l++];
                while (m <= right)
                    orderedArr[start++] = array[m++];
            }
        }
    }

算法系列

冒泡排序
选择排序
直接插入排序
二分插入排序
希尔排序
堆排序
归并排序

欢迎关注公共号

关注公共号会有更多收获!

扫一扫,据说年轻、优秀、颜值高的互联网人都在这个群里

相关文章

  • LeetCode大全

    1.常见排序算法: 常见的排序算法:冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、...

  • 盘点常用Java排序算法

    本文主要介绍Java的七种常见排序算法的实现,对选择排序、插入排序、冒泡排序、归并排序、快速排序、希尔排序、最小堆...

  • 盘点常用Java排序算法

    本文主要介绍Java的七种常见排序算法的实现,对选择排序、插入排序、冒泡排序、归并排序、快速排序、希尔排序、最小堆...

  • Python知识点:常见算法的python实现

    提到排序算法,常见的有如下几种:冒泡排序、选择排序、插入排序、快速排序、堆排序、归并排序、希尔排序;查找算法最常见...

  • 排序算法

    常见的排序算法 常见的排序算法有:插入、希尔、选择、冒泡、归并、快速、堆排序。。。 插入排序 算法步骤一、从数组的...

  • Python排序算法有哪几种?

    python排序算法有哪些?python中常见的排序算法有:插入排序、选择排序、冒泡排序、快速排序、归并排序、希尔...

  • 常用排序算法实现

    1、常见排序算法大致有以下几种:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序2、各种排序算法...

  • 排序算法

    排序算法 排序是最基本的算法之一,常见的排序算法有插入排序、希尔排序、选择排序、冒泡排序、堆排序、归并排序及快速排...

  • 归并排序算法实现

    排序算法是最常见,最基础的算法,作者文集中记录了两种排序算法(插入排序,归并排序) 归并排序实现原理是切刀流,先中...

  • Java常见排序算法详解——归并排序

    概念: 归并排序Merge Sort归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的典型应用。...

网友评论

    本文标题:Java常见排序算法详解——归并排序

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