歸併排序-JAVA語言實現

import java.util.Arrays;

public class MergeSort {
    public static void main(String[] args) {
        int [] arr = new int[]{5,0,1,7,8,4,6,3,9,2};
        System.out.println("排序之前:");
        System.out.println(Arrays.toString(arr));
        mergeSort(arr, 0, arr.length - 1);
        System.out.println("排序之後:");
        System.out.println(Arrays.toString(arr));
    }

    public static void mergeSort(int[] arr, int low, int high){
        int middle = (high + low)/2;
        if (low < high){
            //遞歸排序左邊
            mergeSort(arr, low, middle);
            //遞歸排序右邊
            mergeSort(arr, middle +1, high);
            //將遞歸排序好的左右兩邊合併
            merge(arr, low, middle, high);
        }

    }

    public static void merge(int[] arr, int low, int middle, int high){
        //存儲歸併後的臨時數組
        int[] temp = new int[high - low + 1];
        int i = low;
        int j = middle + 1;
        //記錄臨時數組中存放數字的下標
        int index = 0;
        while (i <= middle && j <= high){
            if (arr[i] < arr[j]){
                temp[index] = arr[i];
                i++;
            } else {
                temp[index] = arr[j];
                j++;
            }
            index++;
        }
        //處理剩下的數據
        while (j <= high){
            temp[index] = arr[j];
            j++;
            index++;
        }
        while (i <= middle){
            temp[index] = arr[i];
            i++;
            index++;
        }
        //將臨時數組中的數據放回原來的數組
        for (int k = 0; k < temp.length; ++k){
            arr[k + low] = temp[k];
        }
    }
}

 

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