zoukankan      html  css  js  c++  java
  • java实现归并排序算法

    归并排序算法思想:
    分而治之(divide - conquer);每个递归过程涉及三个步骤
    第一, 分解: 把待排序的 n 个元素的序列分解成两个子序列, 每个子序列包括 n/2 个元素.
    第二, 治理: 对每个子序列分别调用归并排序MergeSort, 进行递归操作
    第三, 合并: 合并两个排好序的子序列,生成排序结果.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    public static void mergeSort(int[] a, int[] tmp, int left, int right) {
        if (left < right) {
          int mid = left + (right - left) / 2;
          mergeSort(a, tmp, left, mid);// 左排序
          mergeSort(a, tmp, mid + 1, right);// 右排序
          merge(a, tmp, left, mid + 1, right);// 左右合并
        }
      }
    public static void merge(int[] a, int[] tmp, int left, int rightPos,
          int right) {
        int leftEnd = rightPos - 1;
        int tmpPos = left;
        int num = right - left + 1;
        while (left <= leftEnd && rightPos <= right) {
          if (a[left] < a[rightPos]) {
            tmp[tmpPos++] = a[left++];
          } else {
            tmp[tmpPos++] = a[rightPos++];
          }
        }
        while (left <= leftEnd) {
          tmp[tmpPos++] = a[left++];
        }
        while (rightPos <= right) {
          tmp[tmpPos++] = a[rightPos++];
        }
        for (int i = 0; i < num; i++, right--) {
          a[right] = tmp[right];
        }
      }

    归并算法示意图:

  • 相关阅读:
    面试题:你了解对象分配规则吗
    面试题:Java 对象的创建过程
    面试题:Minor GC、Major GC、Full GC的触发时机
    常见的垃圾回收算法
    Java GUI快速入门
    Java Swing 介绍
    Java 开发环境配置
    Java (windows)安装教程
    Gamma、Linear、sRGB 和Unity Color Space,你真懂了吗?
    Qt OpenGL 蒙板
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/6277197.html
Copyright © 2011-2022 走看看