归并排序(Java版)

实现思路:

代码实现:

import java.util.Arrays;

/**
 * @Author: PurcellHuang
 * @Date: 2019-08-08 12:55
 */
public class MergeSort {

    /**
     * @Author: PurcellHuang
     * @Date: 2019-08-08 13:29
     * 归并排序
     */
    public static void sort(int []a, int low, int hight){
        if(low < hight){
            int middle = (low + hight)/2;
            sort(a,low,middle);
            sort(a,middle+1,hight);
            MergeSort.mergeSort(a,low,middle,hight);
        }
    }
    public static void mergeSort(int []a, int low, int middle, int hight){
        int []arr = new int[hight-low+1];   //临时数组  排序后
        int i = low;
        int j = middle+1;
        int index = 0;
        while(i <= middle && j <= hight){
            if(a[i]<a[j]){
                arr[index] = a[i];
                i++;
            }else{
                arr[index] = a[j];
                j++;
            }
            index++;
        }
        while (i <= middle){
            arr[index] = a[i];
            i++;
            index++;
        }
        while (j <= hight){
            arr[index] = a[j];
            j++;
            index++;
        }
        //吧临时数组放回原数组
        for(int k = 0; k < arr.length; k++){
            a[k+low] = arr[k];
        }

    }


    public static void main(String[] args) {
        int []a = {2,4,5,2,1,88,8,9,21,2,5};
        MergeSort.sort(a,0,a.length-1);
        System.out.println(Arrays.toString(a));

    }

}

发布了18 篇原创文章 · 获赞 7 · 访问量 4195

猜你喜欢

转载自blog.csdn.net/weixin_37267014/article/details/99294195