歸併排序算法(適合大量數據)


歸併排序算法和快速排序算法時間複雜度都爲o(nlogn) ,且需要額外申請一個內存空間,用到的思想都是分治。
下邊是我的代碼可以拿去直接用。




public class MergeSort {
    public static void main(String[] args) {

        int arr[] = new int[]{1, 9, 2, 4, 88, 21, 15, 33, 16, 22, 51, 53, 99};//15
        new MergeSort().merge_sort(arr);
        System.out.println("");

    }

    public void merge_sort(int[] arr) {
        quick_sort_c(arr, 0, arr.length - 1);
    }

    private void quick_sort_c(int[] arr, int first, int end) {
        if (first >= end) return;
        int m = (first + end) / 2;
        quick_sort_c(arr, first, m);
        quick_sort_c(arr, m + 1, end);
        merge(arr, first, end, m);
    }

    private void merge(int arr[], final int s, final int e, final int m) {
        //把數組arr由 s-e 劃分成兩個區域  s-m   m+1-e

        int temp[] = new int[(e - s)+1];//申請一個和arr原數組一樣的新數組
        int i = s, j = m + 1;
        int k;
        for (k = 0; i <= m && j <= e; k++) {
            if (arr[i] <= arr[j]) {
                temp[k] = arr[i++];
            } else {
                temp[k] = arr[j++];
            }
        }
        //判斷一下哪一個區域有剩餘,並將剩餘的部分依次放入temp
        int sn = 0, se = -1;
        if (i <= m) {
            sn = i;
            se = m;
        } else if (j <= e) {
            sn = j;
            se = e;
        }
        for (; sn <= se; sn++) {
            temp[k++] = arr[sn];
        }
        //把temp合併好的有序數組依次放到原數組種
        for (int t = 0; t< temp.length; t++) {
            arr[s + t] = temp[t];
        }
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章