其他分享
首页 > 其他分享> > 归并排序MergeSort_听韩顺平课笔记

归并排序MergeSort_听韩顺平课笔记

作者:互联网

1.归并排序思想(分治:Divide-and-conquer)

将问题分成一些小问题,然后递归求解,将分的各阶段得到的答案"修补"到一起

2.归并排序时间复杂度O(nlogn)

归并排序需要额外的空间开销

3.归并排序

package 算法.排序;

import java.util.Arrays;

public class MergeSort {
    public static void main(String[] args) {
        int[] arr = new int[8];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int)(Math.random()*100+1);
        }
        int[] temp = new int[arr.length];
        System.out.println(Arrays.toString(arr));

        mergeSort(0,arr.length-1,arr,temp);

        System.out.println(Arrays.toString(arr));
    }
    static void mergeSort(int left, int right, int[] arr, int[] temp){
        int mid = 0;
        if (left < right){
            mid = (left+right)/2;
            // 向左拆分
            mergeSort(left,mid,arr,temp);
            // 向右拆分
            mergeSort(mid+1,right,arr,temp);

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

    static void merge(int left, int right, int mid, int[] arr, int[] temp){
        //
        int i = left;
        int j = mid + 1;
        int t = 0;

        while(i <= mid && j <= right){  // 这里j<=right,不能写成j<arr.length,且right=arr.length-1

            if (arr[i] <= arr[j]){ // 升序
                temp[t] = arr[i];
                i ++;
                t ++;
            }else{
                temp[t] = arr[j];
                j ++;
                t ++;
            }
        }

        while(i <= mid){
            temp[t] = arr[i];
            i ++;
            t ++;
        }
        while(j <= right){
            temp[t] = arr[j];
            j ++;
            t ++;
        }

        // 拷贝,第一次写忘了拷贝这一步,将临时数组中的元素拷贝到数组中,
        // 这里用for,arr.length的方式,不合理,temp的长度一直是和arr一致的,
        t = 0 ;
        int tempLeft = left;
        while(tempLeft <= right){
            arr[tempLeft] = temp[t];
            t ++;
            tempLeft ++;
        }
    }
}


标签:MergeSort,归并,right,temp,arr,int,mid,left,顺平
来源: https://www.cnblogs.com/CH0701/p/15343903.html