《排序算法》系列 -浅显易懂的认识---归并排序

前言

终于快要把几中排序算法看完了,虽然还不是太懂,但是自己也知道了其中的实现原理,或许在实现方便自己还会有问题,但是以后用在项目中就能熟能生巧了。
在这里插入图片描述
所以在以后遇到通过排序算法去实现的功能,自己也要学以致用了!

好了言归正传,开始上代码:

import java.util.Arrays;

/**
 * @author Administrator
 *
 * 在归并排序中,归并排序的思想是对数组进行拆分再合并的思想
 * 首先将数组进行拆分两份
 * 将拆分的数组再进行拆分,在进行拆分时通过递归的思想进行层层拆分,直到拆分到最小
 * 将最小数组的值进行比较排序,然后再进行合并
 * 将合并的数组最后合并成整个数组
 * 此时数组就是已经排好序的数组
 */
public class mergeSort {

    /**
     * 分解数组操作
     * @param array
     * @return
     */
    public int[] merge(int[] array){
        if (array.length<2){
            return array;
        }
        //获取数组中间值、取整
        int mid = array.length/2;
        //对数组进行拆分
        int[] leftArray = Arrays.copyOfRange(array,0,mid);
        int[] rightArray = Arrays.copyOfRange(array,mid,array.length);
        //对数组进行拆分并合并,拆分时任然需要调用该方法,因此使用递归的思想进行拆分
        return mergeSort(merge(leftArray),merge(rightArray));
    }


    /**
     * 合并数组操作
     * @param leftArray
     * @param rightArray
     */
    public int[] mergeSort(int[] leftArray,int[] rightArray){
        //定义一个新的数组,用来存放合并的数组
        int[] newArray = new int[leftArray.length+rightArray.length];
        //定义两个数组的下标
        int leftIndex = 0;
        int rightIndex = 0;
        for (int i = 0; i < newArray.length; i++) {
            if (leftIndex>=leftArray.length){
                newArray[i] = rightArray[rightIndex++];
            }else if (rightIndex>=rightArray.length){
                newArray[i] = leftArray[leftIndex++];
            }else if (leftArray[leftIndex]<rightArray[rightIndex]){
                newArray[i] = leftArray[leftIndex++];
            }else {
                newArray[i] = rightArray[rightIndex++];
            }
        }
        return newArray;
    }



    public static void main(String[] args) {
        mergeSort mergeSort = new mergeSort();
        int[] arr = new int[5];
        arr[0]=5;
        arr[1]=2;
        arr[2]=6;
        arr[3]=9;
        arr[4]=0;
        System.out.println(Arrays.toString(arr));
        arr = mergeSort.merge(arr);
        System.out.println(Arrays.toString(arr));
    }
}

依然是老样子,自己的理解是写在代码中的,可以通过阅读代码来看实现的逻辑。

当然了自己的理解也可能有不正确的地方,也希望能给予指正,共同学习!
在这里插入图片描述

发布了92 篇原创文章 · 获赞 7 · 访问量 7538

猜你喜欢

转载自blog.csdn.net/qq_40126996/article/details/104742344