归并排序

     private void mergeSort(int[] nums, int left, int right, int[] temp){
        if(left < right){
            int mid = (left + right)>>>1;
            mergeSort(nums, left, mid, temp);
            mergeSort(nums, mid + 1, right, temp);
            merge(nums, left, mid, right, temp);
        }
    }
    private void merge(int[] nums, int left, int mid, int right, int[] temp){
        int i = left;//左序列指针
        int j = mid + 1;//右序列指针
        int t = 0;//临时数组指针
        while(i <= mid && j <= right){
            if(nums[i] <= nums[j]){
                temp[t++] = nums[i++];
            }else{
                temp[t++] = nums[j++];
            }
        }
        while(i <= mid){
            temp[t++] = nums[i++];
        }
        while(j <= right){
            temp[t++] = nums[j++];
        }
        t = 0;
        while(left <= right){
            nums[left++] = temp[t++];
        }
    }
posted @ 2020-03-19 17:26  Whisperbb  阅读(77)  评论(0编辑  收藏  举报