归并排序法
https://www.luogu.org/problemnew/show/P1966
火柴排序的题,可用归并来做。学完归并找来看了一下这道题。
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
开辟额外空间进行归并。
先进行递归分子集,然后进行归并。归并的时候开辟新数组aux进行归并。
import java.util.*;
public class MergeSort{
// 我们的算法类不允许产生任何实例
private MergeSort(){}
// 将arr[l...mid]和arr[mid+1...r]两部分进行归并
private static void merge(Comparable[] arr, int l, int mid, int r) {
Comparable[] aux = Arrays.