归并排序

浪尽此生 提交于 2020-04-05 15:00:18

https://www.bilibili.com/video/BV1Zt411o7Rn?p=25

参考:这个视频借鉴的归并写法

主要逻辑在对排好后的两个数组进行归并逻辑,就是有一个指向第一个数组的指针i和指向第二个数组的指针j

进行比较并将小的结果放进临时数组,直到一方遍历完成为止,然后再把没有遍历完的数组以此进入数组即可

 private static void mergeSort(int[] arr,int start,int end){
        if(start >= end){
            return;
        }
        int mid = (start + end) / 2;
        mergeSort(arr,start,mid);
        mergeSort(arr,mid + 1,end);
        merge(arr,start,mid,end);
    }
    private static void merge(int[] arr,int start,int mid,int end){
        int[] temp = new int[end - start + 1];
        int i = start;// 记录第一个数组的下标
        int j = mid + 1;// 记录第二个数组的下标
        int index = 0;// 记录第新数组的下标
        while (i <= mid  && j <= end){
            if(arr[i] < arr[j]){
                temp[index] = arr[i];
                i++;
            }else {
                temp[index] = arr[j];
                j++;
            }
            index++;
        }
        while (i <= mid){
            temp[index] = arr[i];
            i++;
            index++;
        }
        while (j <= end){
            temp[index] = arr[j];
            j++;
            index++;
        }
        for (int k = 0;k<temp.length; k++){
            arr[start + k] = temp[k];
        }
    }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!