算法基础之--归并排序

package wck.sort;/**
 * Created  on 18/9/11.
 */

import java.util.Arrays;

/**
 * @program: demo
 * @description: 归并排序
 * @author: wck
 * @create: 2018-09-11 16:11
 **/
public class MergeSort {

    public static void sort(int[] arr){
        int n = arr.length;
        sort(arr, 0, n-1);
    }

    private static void sort(int[] arr , int l,int r){
        //只有一个元素,或者没有。代表数据集为空
        if (l >= r)
            return;

        int mid = (l+r)/2;
        sort(arr, l, mid);
        sort(arr, mid + 1, r);
        merge(arr, l, mid, r);
    }

    private static void merge(int[] arr, int l, int mid, int r) {

        int[] aux = new int[r-l+1];

        for(int g=l;g<=r;g++)
            aux[g-l] = arr[g];

        int i =l,j=mid + 1;
        for (int k =l; k<=r;k++){

            if(i > mid){
                arr[k] = aux[j-l];
                j++;
            }
            else if(j > r){
                arr[k] = aux[i-l];
                i++;
            }
            else if(aux[i-l] < aux[j-l]){
                arr[k]=aux[i-l];
                i++;
            }else{
                arr[k]=aux[j-l];
                j++;
            }

        }

    }

    // 测试MergeSort
    public static void main(String[] args) {

        int[] arr = {5,4,2,3,1,99,55,66,499,992,8090};
        sort(arr);

        for (int i=0;i<arr.length;i++)
            System.out.println(arr[i]);

        return;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36866808/article/details/82657738