經典排序 —— 歸併排序

基本思想

歸併排序是創建在歸併操做上的一種有效的排序算法,該算法是採用分治法的一個典型的應用。它的基本操做是:將已有的子序列合併,達到徹底有序的序列;即先使每一個子序列有序,再使子序列段間有序。java

算法實現

package cn.caojiantao.tutorials.sort;

/** * @author caojiantao */
public class Merge implements ISort {

    @Override
    public void sort(int[] data) {
        sort(data, 0, data.length - 1);
    }

    private void sort(int[] data, int start, int end) {
        if (start < end) {
            int m = (start + end) / 2, i = start, j = m + 1, cursor = 0;
            // 分
            sort(data, start, m);
            sort(data, m + 1, end);
            // 而治之
            int[] tmp = new int[end - start + 1];
            while (i <= m && j <= end) tmp[cursor++] = (data[i] <= data[j]) ? data[i++] : data[j++];
            while (i <= m) tmp[cursor++] = data[i++];
            while (j <= end) tmp[cursor++] = data[j++];
            System.arraycopy(tmp, 0, data, start, tmp.length);
        }
    }
}

複製代碼

複雜度

  • 時間複雜度 O(nlog2n)
  • 空間複雜度 O(n)

穩定性

穩定算法

相關文章
相關標籤/搜索