SLy

永远年轻,永远憧憬,永远热爱。


  • 首页

  • 归档

  • 影集

  • 关于

  • 搜索
Thread Spring JAVA JVM 游记 计算机基础 MySQL 排序算法 PMP 情感 摄影 博客

归并排序

发表于 2020-12-19 | 分类于 排序算法 | 0 | 阅读次数 1122
package com.sort.admin;

public class MergeSort {

    /**
     * 归并排序 - O(n*㏒2n)
     *
     * @param arr 需要排序的数组
     */
    public static void sort(int[] arr, int left, int right) {
        if (left == right) {
            return;
        }

        // 分成两半
        int mid = left + (right - left) / 2;

        // 左边排序
        sort(arr, left, mid);

        // 右边排序
        sort(arr, mid + 1, right);

        merge(arr, left, mid + 1, right);

    }

    /**
     * 假设一个数组里面左右两数组已经排好顺序使用归并
     *
     * @param arr        归并数组
     * @param leftPtr    左边数组的左指针
     * @param rightPtr   右边数组的左指针
     * @param rightBound 数组右边界
     */
    public static void merge(int[] arr, int leftPtr, int rightPtr, int rightBound) {
        if (leftPtr > rightPtr || rightPtr > rightBound) {
            return;
        }

        int mid = rightPtr - 1;
        int[] temp = new int[rightBound - leftPtr + 1];

        int i = leftPtr;
        int j = rightPtr;
        int k = 0;

        while (i <= mid && j <= rightBound) {
            temp[k++] = arr[i] <= arr[j] ? arr[i++] : arr[j++];
        }

        while (i <= mid) {
            temp[k++] = arr[i++];
        }

        while (j <= rightBound) {
            temp[k++] = arr[j++];
        }

        for (int l = 0; l < temp.length; l++) {
            arr[leftPtr + l] = temp[l];
        }

    }

    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static void print(int[] arr) {
        System.out.println("arr -- >");
        for (int j : arr) {
            System.out.print(j + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        int[] arr = {1, 4, 7, 9, 2, 3, 5, 6, 8};

        print(arr);
        sort(arr, 0, arr.length - 1);
        print(arr);

    }
}
  • 本文作者: SLy
  • 本文链接: https://sly.plus/archives/mergesort
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0 许可协议。转载请注明出处!
# Thread # Spring # JAVA # JVM # 游记 # 计算机基础 # MySQL # 排序算法 # PMP # 情感 # 摄影 # 博客
ACID
MySQL锁的机制
  • 文章目录
  • 站点概览
SLy

SLy

永远年轻,永远憧憬,永远热爱。

37 日志
12 分类
12 标签
RSS
Github E-mail
Creative Commons
© 2020 — 2025 SLy