java方式实现归并排序

一、基本思想

归并排序是建立在归并操作上的一种排序算法,该算法是采用分治法的一个典型应用。具体操作如下:所谓的分治就是分而治之,以一分为二的原则,先把序列平均分解成二个左右子序列,然后递归左右二个子序列进行分解操作,直到得到的子序列为一个元素时,然后两两合并子序列并排序,然后递归以上合并操作,直到合并完整个序列。归并排序的平均时间复杂度为O(nlog2n),归并排序需要开辟一个数组空间,所有归并排序空间复杂度为0(n)。归并排序是稳定的排序。

二、图解

三、代码实现

ublic class JavaSort {
    public static void main(String[] args) {
        int a [] =new int []{6,5,3,1,8,7,2,4};
        System.out.println("排序前的数组:"+Arrays.toString(a));
        mergeSort(a, 0, a.length-1);
        System.out.println("排序后的数组:"+Arrays.toString(a));
    }
    
    /**
     * 
     * @param ary 未排序的序列
     * @param left 序列起始索引
     * @param right 序列末尾索引
     */
    public static void mergeSort(int[] ary, int left, int right) {
        if(null == ary) {
            return;
        }
        
        if(left < right) {
            //找中间位置进行划分
            int mid = (left+right)/2;
            //对左子序列进行递归分解
            mergeSort(ary, left, mid);
            //对右子序列进行递归分解
            mergeSort(ary, mid+1, right);
            // 进行递归并归排序
            merge(ary, left, mid, right);
        }
    }
    
    /**
     * 进行归并
     * @param ary  未排序的序列
     * @param left 序列起始索引
     * @param mid 序列中间索引
     * @param right 序列末尾索引
     */
    private static void merge(int[] ary, int left, int mid, int right) {
        int[] tempArr = new int[ary.length];
        int leftStart = left;
        int rightStart = mid+1;
        int tempIndex = left;
        
        while(leftStart <= mid && rightStart <= right) {
            if(ary[leftStart] < ary[rightStart]) {
                tempArr[tempIndex++] = ary[leftStart++];
            } else {
                tempArr[tempIndex++] = ary[rightStart++];
            }    
        }
        
        while(leftStart <= mid) {
            tempArr[tempIndex++] = ary[leftStart++];
        }
        
        while(rightStart <= right) {
            tempArr[tempIndex++] = ary[rightStart++];
        }
        
        while(left <= right) {
            ary[left] = tempArr[left++];
        }
    }
}

代码运行:

猜你喜欢

转载自www.cnblogs.com/shareAndStudy/p/12466394.html
今日推荐