算法之自顶向下的归并排序

  • 基本概念

试想一个操作,将一个数组(默认为无序)切割成两段,然后分别进行排序,然后将结果结合在进行排序归并。在数据结构之中这是一种简单的递归归并排序算法,是应用高效算法设计中分治思想的典型例子。
归并排序的基本逻辑是,要对数组[min,max]进行排序,先把他分成[min,mid]和[mid + 1, max]两个数组,分别进行排序最后归并起来。
《算法之自顶向下的归并排序》

  • 代码实现

接下来我将用java语言完成代码的描述。

public class MergeSort {
    private static int[] temp;//初始化一个归并所需的辅助数组

    public static void mergeSort(int[] arr) {
        temp = new int[arr.length];//把数组的长度变为要排序数组的长度
        mergeSort(arr,0,arr.length - 1);//调用方法
        }

    public static void mergeSort(int[] arr, int min, int max) {
        if(min >= max) {//当数组长度为1时退出方法
        return;
        }

        int mid = min + (max - min)/2;
        mergeSort(arr,min,mid);//通过递归排序两段
        mergeSort(arr,mid + 1, max);//通过递归排序两段
        merge(arr,min,mid,max);
        }

    public static void merge(int[]arr,int min,int mid,int max) {//两个有序数组归并方法
        int i = min;
        int j = mid + 1;

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

    for(int x = min; x <= max; x++) {
        if(i > mid) {
            arr[x] = temp[j++];
        }else if(j > max) {
            arr[x] = temp[i++];
        }else if(temp[j] < temp[i]) {
            arr[x] = temp[j++];
        }else {
            arr[x] = temp[i++];
        }
        }



点赞