归并排序

来源:互联网 发布:文档电子目录软件 编辑:程序博客网 时间:2024/06/10 16:47
package sdibt;public class MergeSort {    /**     * 将数组二分     * 将排好的两部分合并     */    public static void MSort(int[] arr,int left,int right){        if(left<right){            int mid=(left+right)/2;            MSort(arr, left, mid);            MSort(arr, mid+1, right);            Merge(arr,left,right,mid);        /*  System.out.print("----");            for (int i : arr) {                System.out.print(i+" ");            }            System.out.println();*/        }    }/** * 合并两个有序数组 * @param arr * @param left * @param right * @param mid */    public static void Merge(int[] arr, int left, int right, int mid) {        int i=left;        int j=mid+1;        int t=0;        int[] temp=new int[arr.length];        while(i<=mid&&j<=right){            if(arr[i]<arr[j]){                temp[t++]=arr[i++];             }            else{                temp[t++]=arr[j++];            }        }        while(i<=mid){            temp[t++]=arr[i++];        }        while(j<=right){            temp[t++]=arr[j++];        }        t=0;        while(left<=right){            arr[left++]=temp[t++];        }    }    public static void main(String[] args) {        int[] arr={10,8,0,99,10,3,2};        MSort(arr, 0, arr.length-1);        for (int i : arr) {            System.out.print(i+" ");        }        System.out.println();    }}