归并排序

2017-07-13  本文已影响0人  jose_dl
int[] num = {32,2,1,6,23,11,10,43,2};

最开始通过数组下标low=0和长度high=8找到中间值mid=(low+high)/2。此时把原问题分解成2个子问题,然后再对两个子问题进行归并排序。先把0-mid子数组排序,然后mid+1-high排序

public static int[] mergeSort(int[] num,int low,int high) {
        
        int mid = (low+high)/2;
        if (low<high) {
            mergeSort(num, low, mid);
            
            mergeSort(num, mid+1, high);
            
            mergeSort( num, low, mid,high);
        }
        return num; 
    }

    private static void mergeSort(int[] num, int low, int mid, int high) {

        int[] temp = new int[high-low+1];
        int i=low;
        int j=mid+1;
        int k=0;
        while(i<=mid&&j<=high){
            if (num[i]<num[j]) {
                temp[k++]=num[i++];
            }else {
                temp[k++]=num[j++];
            }
        }
        while(i<=mid){
            temp[k++]=num[i++];
        }
        while(j<=high){
            temp[k++]=num[j++];
        }
        
        for (int k2 = 0; k2 < temp.length; k2++) {
            num[k2+low]=temp[k2];
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读