归并排序

Posted 韩思明

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序相关的知识,希望对你有一定的参考价值。

基本思想

归并排序是建立在归并操作上的一种有效的排序算法。

该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

将一个数组分为越来越小的子列表,每个子列表单独进行排序,然后合并形成更大的有序列表。

通过归并子列表元素来合并子列表就是归并排序(Merge Sort)

代码实现

package com.csdhsm.sort;

public class MergeSort {
    
    public void sort(int[] arr,int low,int high){
        
        int mid = (low + high)/2;
        if(low < high){
            
            sort(arr,low,mid);
            sort(arr,mid+1,high);
            mergeSort(arr,low,mid,high);
        }
    }
    
    private void mergeSort(int[] arr,int low,int mid,int high){
        
        /**
         * 用于存放归并好的数组 
         */
        int[] copyArr = new int[high - low + 1];
        
        int i = low;
        int j = mid + 1;
        int k = 0;
        
        /**
         * 比较两个有序序列
         */
        while(i<=mid&&j<=high){
            
            if(arr[i] <= arr[j]){
                
                copyArr[k] = arr[i];
                i++;
            }else{
                
                copyArr[k] = arr[j];
                j++;
            }
            
            k++;
        }
        
        /**
         * 下面两个循环只会执行一个
         */
        while(i<=mid){
            
            copyArr[k] = arr[i];
            i++;
        }
        
        while(j<=high){
            
            copyArr[k] = arr[j];
            j++;
        }
        
        for(i=0;i<=k;i++){
            
            arr[low+i] = copyArr[i];
        }
    }
}

效率分析

稳定

空间复杂度:O(n)

时间复杂度:O(nlog2n)

最坏情况:O(nlog2n)

最好情况:O(nlog2n)

以上是关于归并排序的主要内容,如果未能解决你的问题,请参考以下文章

python代码实现归并排序(Merge Sort )

排序之外部排序

Python代码实现归并排序

Python代码实现归并排序

算法排序02——归并排序介绍及其在分治算法思想上与快排的区别(含归并代码)

排序算法之归并排序