归并排序

归并排序

归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer) 策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修 补"在一起,即分而治之)。
在这里插入图片描述
在这里插入图片描述
归并排序先把每一个分开,然后在合并的时候排序
时间跟快速排序差不多
定义一个左指针一个右指针,一个中间变量,一个临时数组
分开后,对比两个合并,先存放小的,然后存大的,然后把剩下的存储进去
具体实现如下:

/**
     *
     * @param arr 原数组
     * @param left 左边
     * @param right 右边
     * @param temp  临时存储数组
     */

    //分与和
    public static void MergeSort(int [] arr,int left,int right,int [] temp)
    {
        //当左指针小于右边的指针
        if (left<right)
        {
            //中间的指针
            int mid=(left+right)/2;
            //向左递归
            MergeSort(arr,left,mid,temp);
            //向右递归
            MergeSort(arr,mid+1,right,temp);

            //合并
           merge(arr,left,mid,right,temp);
        }
    }

    /**
     *
     * @param arr 原数组
     * @param left  左边
     * @param mid  中间
     * @param right  右边
     * @param temp  临时存储数组
     */
    //合并
    public static void merge(int [] arr,int left,int mid,int right,int [] temp)
    {
        //定义左边的指针
        int i=left;
        //定义中间的指针
        int j=mid+1;
        //设置临时数组的指针
        int t=0;
        //当左边的指针小于中间的指针和右边的指针小于右边的指针
        while (i<=mid&&j<=right)
        {
            //当左边小于右边时,把左边存储进去
            if (arr[i]<=arr[j])
            {
                temp[t]=arr[i];
                t+=1;
                i+=1;
            }else //否则存储右边进去
            {
                temp[t]=arr[j];
                t+=1;
                j+=1;
            }
        }
        //当左边没有存储完,把剩下的存储进去
        while (i<=mid)
        {
            temp[t]=arr[i];
            t+=1;
            i+=1;
        }
        //当右边没有存储完,把剩下的存储进去
        while (j<=right)
        {
            temp[t]=arr[j];
            t+=1;
            j+=1;
        }
        //初始化
        t=0;
        //设置从左边开始存储
        int templeft=left;
        //当小于右边时,开始复制
        while (templeft<=right)
        {
            arr[templeft]=temp[t];
            t+=1;
            templeft+=1;
        }
    }

在这里插入图片描述

posted @ 2020-10-24 15:40  Latteitcjz  阅读(69)  评论(0)    收藏  举报