高级排序算法:归并排序(优化版)

题目描述

leecode第912题:排序数组:

给你一个整数数组 nums,请你将该数组升序排列。

示例 1:

输入:nums = [5,2,3,1]
输出:[1,2,3,5]

示例 2:

输入:nums = [5,1,1,2,0,0]
输出:[0,0,1,1,2,5]

提示:

1 <= nums.length <= 5 * 104
-5 * 104 <= nums[i] <= 5 * 104

代码:

//归并排序优化
class Solution {
public:
    vector<int> sortArray(vector<int>& nums) {
        int len = nums.size();

        //优化1:全局使用一份临时数组
        int *temp = new int[len];
        mergeSort(nums, 0, len - 1, temp);
        return nums;
    }

    void mergeSort(vector<int>& nums, int left, int right, int* temp){
        if(right == left){
            return;
        }
        int mid = left + (right - left)/2;
        
        mergeSort(nums, left, mid, temp);
        mergeSort(nums, mid + 1, right, temp);
        //优化2:在两部分数组已经有序的情况下,不再合并
        if(nums[mid] < nums[mid+1]){
            return;
        }
        mergeOfTwoSortedArray(nums, left, mid, right, temp);
    }


    void mergeOfTwoSortedArray(vector<int>& nums, int left, int mid, int right, int* temp){
        for(int i = left; i<=right; i++){
            temp[i] = nums[i];
        }

        int i = left, j = mid + 1;
        for(int k = left; k<=right; k++){
            if(i == mid+1){
                nums[k] = temp[j];
                j++;
            }
            else if(j == right + 1){
                nums[k] = temp[i];
                i++;
            }

            else if(temp[i] <= temp[j]){//这一行的else没写曾经耗费了很长时间排查
                nums[k] = temp[i];
                i++;
            }
            else if(temp[i] > temp[j]){
                nums[k] = temp[j];
                j++;
            }
        }
    }
};

相关推荐

  1. 高级排序算法归并排序优化

    2024-04-01 06:46:03       36 阅读
  2. 排序算法——归并排序

    2024-04-01 06:46:03       61 阅读
  3. 可能内存溢出的高级排序算法-归并排序

    2024-04-01 06:46:03       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-01 06:46:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-01 06:46:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-01 06:46:03       82 阅读
  4. Python语言-面向对象

    2024-04-01 06:46:03       91 阅读

热门阅读

  1. 【模拟题,多个变量不用结构体型】

    2024-04-01 06:46:03       32 阅读
  2. rust实现循环队列

    2024-04-01 06:46:03       36 阅读
  3. 如何调整Node内存限制

    2024-04-01 06:46:03       42 阅读
  4. OpenJudge - 16:忽略大小写的字符串比较

    2024-04-01 06:46:03       42 阅读
  5. pytorch-分类-检测-分割的dataset和dataloader创建

    2024-04-01 06:46:03       45 阅读
  6. JVM堆栈详解

    2024-04-01 06:46:03       36 阅读
  7. 20240323-2-决策树面试题DecisionTree

    2024-04-01 06:46:03       27 阅读
  8. ubuntu22.04忘记用户密码

    2024-04-01 06:46:03       33 阅读
  9. 【内网离线环境】搭建本地YUM源

    2024-04-01 06:46:03       42 阅读
  10. Excel中文显示问号

    2024-04-01 06:46:03       44 阅读
  11. 大型语言模型可以“在两年内彻底改变金融业”

    2024-04-01 06:46:03       35 阅读