每日一练:归并-排序数组

912. 排序数组 - 力扣(LeetCode)

题目要求:

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

你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O(nlog(n)),并且空间复杂度尽可能小。

示例 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 * 10^4
  • -5 * 104 <= nums[i] <= 5 * 10^4

归并排序 O(NLogN):

归并排序的思路就是将一个数组分成左右两个数组,将左右两个数组分别排序好之后,将这两个有序数组再次进行排序即可。

cpp 复制代码
class Solution {
    vector<int> tmp; // 辅助数组

    void _sortArray(vector<int>& nums, int sta, int end) {
        if (sta == end)
            return;
        // 1、选择中间点划分数组
        int mid = sta + (end - sta) / 2;

        // 2、排序左右区间数组
        _sortArray(nums, sta, mid);
        _sortArray(nums, mid + 1, end);

        // 3、排序的核心过程
        int i = sta, j = mid+1, z = 0;
        while (i <= mid && j <= end) {
            if (nums[i] < nums[j])
                tmp[z++] = nums[i++];
            else
                tmp[z++] = nums[j++];
        }
        while (i <= mid)
            tmp[z++] = nums[i++];
        while (j <= end)
            tmp[z++] = nums[j++];

        // 4、把排序好的结果复制到数组中
        for (int i = sta; i <= end; i++)
            nums[i] = tmp[i - sta];
    }

public:
    vector<int> sortArray(vector<int>& nums) {
        tmp.resize(nums.size());
        _sortArray(nums, 0, nums.size() - 1);
        return nums;
    }
};
相关推荐
(╹◡╹)34 分钟前
18.剪枝
算法·机器学习·剪枝
Fa_Mian_Tuan2 小时前
图论基础|邻接矩阵超详细讲解(含无向/有向/带权图+完整可运行C语言代码)
c语言·数据结构·笔记·算法·图论
hanhahai2 小时前
指针与函数(函数指针与指针函数)
算法
码匠许师傅2 小时前
【C++ 面试真题】聊聊 C++ 的序列容器
java·c++·面试
ValhallaCoder2 小时前
Leetcode-hot100(2026.08.17)
python·算法·leetcode
C++ 老炮儿的技术栈2 小时前
Qt5.9.1 Windows 完整开发环境搭建流程
开发语言·c++·windows·qt·编辑器·代码化
泡沫冰@2 小时前
GO 语言基础
开发语言·算法·golang
键盘会跳舞3 小时前
C++:std::tuple 源码级深度拆解——变参模板、SFINAE与模板元编程核心技巧
开发语言·c++·sfinae·变参模板
bkspiderx3 小时前
从零开始:VS Code搭建C/C++开发环境全指南(Windows/macOS/Linux)
c语言·c++·windows·vs code·c/c++开发环境
东华万里3 小时前
第40篇C++核心基础与工程实践:从底层逻辑到避坑指南
开发语言·c++·面试·大学生专区