归并排序

package org.example.sort;

import java.util.Arrays;

/**
 * @author xianzhe.ma
 * @date 2021/8/9
 */

public class Mergesort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int[] a = new int[]{11, 9, 7, 5, 3, 1, 12, 10, 8, 6, 4, 2};


        int[] tmp = new int[a.length];
        mergeSort(a, 0, a.length - 1, tmp);
    }

    private static void merge(int[] array, int start, int middle, int end, int[] tmp) {

        int first = start;
        int second = middle + 1;
        int index = start;


        while ((first <= middle) && (second <= end)) {
            if (array[first] >= array[second])
                tmp[index++] = array[second++];
            else
                tmp[index++] = array[first++];
        }
        while (first <= middle)
            tmp[index++] = array[first++];
        while (second <= end)
            tmp[index++] = array[second++];

        for (first = start; first <= end; first++)
            array[first] = tmp[first];


        System.out.println("merge is " + Arrays.toString(array));

    }

    public static void mergeSort(int[] array, int start, int end, int[] tmp) {

        if (start >= end)
            return;
        int middle = ((end + start) >> 1);
        mergeSort(array, start, middle, tmp);// 递归划分左边的数组
        mergeSort(array, middle + 1, end, tmp);// 递归划分右边的数组
        merge(array, start, middle, end, tmp);// 对有序的两个数组进行合并成一个有序的数组
    }

}

 

posted on 2021-08-09 17:14  MaXianZhe  阅读(14)  评论(0编辑  收藏  举报

导航