JAVA数据结构——归并排序

14天阅读挑战赛
努力是为了不平庸~
算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算法的理解,同时吸收他人的奇思妙想,一起见证技术er的成长~

算法知识点

提示:简单描述OR总结所学习的算法知识点,可列举文字/图片/视频教程

归并排序

归并排序(Merge Sort)是建立在归并操作上的一种有效的排序算法。归并是指将若干个已排序的子序列合并成一个有序的序列。若将两个有序序列合并成一个有序序列,称为二路归并。

原理

假设初始序列含有n个记录,则可看成n个有序的子序列,每个子序列长度为1。然后两两归并,得到n/2个长度为21的有序子序列;再两两归并,如此重复,直到得到一个长度为n的有序序列为止。

JAVA数据结构——归并排序_第1张图片

算法题目描述

提示:简单描述算法知识点相关题目题意

实现归并排序。

做题思路

提示:可简单描述解题思路,解题步骤,找好切入点,详细讲解这道题所需要使用的算法和考点

排序时需仔细划分数组。

模板代码

提示:可贴上解题代码,在较难的地方可以加上自己的注释

package sort;

import java.util.Scanner;

public class MergeSort {

    /**
     * lo, hi都是指下标
     */
    public static void sort(int arr[], int lo, int hi) {
        if (lo < hi) {
            int mid = (lo + hi) / 2;
            sort(arr, lo, mid);
            sort(arr, mid + 1, hi);
            merge(arr, lo, mid, hi);
            print(arr);
        }
    }

    private static void merge(int arr[], int p, int q, int r) {
        int n1 = q - p + 1;
        int n2 = r - q;
        int L[] = new int[n1 + 1];
        int R[] = new int[n2 + 1];      //初始化
        for (int i = 0; i < n1; i++) {
            L[i] = arr[p + i];
        }
        for (int j = 0; j < n2; j++) {
            R[j] = arr[q + j + 1];
        }                               //赋值
        L[n1] = Integer.MAX_VALUE;
        R[n2] = Integer.MAX_VALUE;
        int i = 0, j = 0;
        for (int k = p; k <= r; k++) {
            if (L[i] <= R[j]) {
                arr[k] = L[i];
                i++;
            } else {
                arr[k] = R[j];
                j++;
            }
        }                               //排序
    }

    private static void print(int arr[]) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int arr[] = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
        }
        MergeSort.sort(arr, 0, arr.length - 1);
    }
}

运行结果

提示:可对同类题型或者其他相关题目做方法论总结,或对这类题型发表自己的看法,提出自己的解题经验

JAVA数据结构——归并排序_第2张图片

 

读书笔记

提示:可简述你在读书过程中的所思所想,以及总结的学习方法

思维导图

提示:可将你接下来的学习计划拆解成思维导图的形式,让学习更有计划和效率

JAVA数据结构——归并排序_第3张图片

提醒:在发布作品前请把不用的内容删掉

你可能感兴趣的:(算法)