排序算法(七)归并排序

2021-11-06  本文已影响0人  又语

归并排序分两个阶段:

复杂度分析

时间复杂度:O(nlogn)
空间复杂度:O(n)

Java 代码实现

import java.util.Arrays;

public class MergeSort {

    public static void sort(int[] data, int start, int end) {
        if (start < end) {
            int middle = (start + end) / 2;
            sort(data, start, middle);
            sort(data, middle + 1, end);
            merge(data, start, middle, end);
        }
    }
    
    private static void merge(int[] data, int start, int middle, int end) {
        int[] temp = new int[end - start + 1];
        int p1 = start;
        int p2 = middle + 1;
        int p = 0;
        while (p1 <= middle && p2 <= end) {
            if (data[p1] <= data[p2]) {
                temp[p] = data[p1++];
            } else {
                temp[p] = data[p2++];
            }
            p++;
        }
        while (p1 <= middle) {
            temp[p++] = data[p1++];
        }
        while (p2 <= end) {
            temp[p++] = data[p2++];
        }
        for (int i = 0; i < temp.length; i++) {
            data[i + start] = temp[i];
        }
    }

    public static void main(String[] args) {
        int[] data = {34, 24, 93, 1, 32, 98, 18, 39};
        sort(data, 0, data.length - 1);
        System.out.println(Arrays.toString(data));
    }
}

运行结果

[1, 18, 24, 32, 34, 39, 93, 98]
上一篇 下一篇

猜你喜欢

热点阅读