数据结构:归并排序(Merge sort)

import java.util.Arrays;

public class MergeSort {
    public static void main(String[] args) {
        int arr[] = {8,4,5,7,1,3,6,2};
        int[] tmp = new int[arr.length];

        mergeSort(arr, 0, arr.length-1, tmp);
        System.out.println(Arrays.toString(arr));
    }

    public static void mergeSort(int[] arr, int left, int right, int[] tmp){
        if(left < right){
            int mid = (left + right)/2;
            mergeSort(arr, left, mid, tmp);
            mergeSort(arr, mid+1, right, tmp);

            merge(arr, left, mid, right,tmp);
        }
    }

    public static void merge(int[] arr, int left, int mid, int right, int[] tmp){
        int i = left;
        int j = mid + 1;
        int t = 0;

        while(i<=mid && j<=right){
            if(arr[i] <= arr[j]){
                tmp[t] = arr[i];
                t++;
                i++;
            }else{
                tmp[t] = arr[j];
                t++;
                j++;
            }
        }

        while(j<=right){
            tmp[t] = arr[j];
            j++;
            t++;
        }

        while(i<=mid){
            tmp[t] = arr[i];
            i++;
            t++;
        }

        //System.out.println(Arrays.toString(tmp));
        //System.out.println("left="+left+"  rigth="+right+"  mid="+mid);

        int tmpLeft = left;
        t = 0;
        while(tmpLeft <= right){
            arr[tmpLeft] = tmp[t];
            tmpLeft++;
            t++;
        }
        //System.out.println("--"+Arrays.toString(arr));
    }
}
发布了557 篇原创文章 · 获赞 40 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/m0_37564426/article/details/104204347
今日推荐