二路归并排序

package lbs;

import java.util.Arrays;
//二路归并排序
public class Num8 {
    static int[] temp = new int[9];
    public static void main(String[] args) {
        System.out.println("二路归并排序:");
        int[] arr = {2,4,1,3,5,7,9,8,6};
        System.out.println(Arrays.toString(arr));
        
        mergeSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
    public static void merge(int[] arr, int low, int mid, int high) {
        int i=0,j=0,k=0;
        for (k = low; k <= high; k++) {
            temp[k] = arr[k];            //将所有数组元素复制到临时数组中
        }
        /*以下for循环是核心内容*/
        for (i = low, j = mid+1, k = i; i <= mid&&j <= high; k++) {
            if (temp[i] <= temp[j]) {
                arr[k] = temp[i++];
            } else {
                arr[k] = temp[j++];
            }
        }
        while (i <= mid) {
            arr[k++] = temp[i++];        //将剩余的部分全部放在末尾
        }
        while (j <= high) {
            arr[k++] = temp[j++];        //将剩余的部分全部放在末尾
        }
    }
    public static void mergeSort (int[] arr, int low, int high) {
        if (low < high) {
            int mid = (low+high)/2;
            mergeSort(arr,low,mid);
            mergeSort(arr,mid+1,high);
            merge(arr,low,mid,high);
        }
    }

}

 

posted @ 2022-03-20 17:47  tobeachallenger  阅读(47)  评论(0)    收藏  举报