首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >分治-归并-912.排序数组-力扣(LeetCode)

分治-归并-912.排序数组-力扣(LeetCode)

作者头像
白天的黑夜
发布2025-10-22 17:16:06
发布2025-10-22 17:16:06
10000
代码可运行
举报
运行总次数:0
代码可运行

一、题目解析

1、将数组排升序

2、在不使用任何内置函数的情况下解决问题

二、算法原理

分治-归并

合并两个有序数组
1、双指针遍历两个合并数组
2、将比较后的较小值放到新开数组中
3、防止有指针未遍历完,特殊处理
4、将nums中的元素还原

三、代码示例

代码语言:javascript
代码运行次数:0
运行
复制
 vector<int> tmp;
    vector<int> sortArray(vector<int>& nums)
    {
        tmp.resize(nums.size());
        mergeSort(nums,0,nums.size()-1);
        return nums;
    }
    void mergeSort(vector<int>& nums,int left,int right)
    {
        //只有一个元素或者区间不存在直接返回
        if(left>=right) return;
        //1、选择中间点划分区间
        int mid = (left+right)>>1;
        //2、左右区间排序
        mergeSort(nums,left,mid);
        mergeSort(nums,mid+1,right);
        //3、合并两个有序数组
        int cur1 = left,cur2 = mid+1,i = 0;
        while(cur1<=mid && cur2<=right)
            tmp[i++] = nums[cur1]<=nums[cur2] ? nums[cur1++] : nums[cur2++];
        //处理没有遍历完的数组
        while(cur1<=mid) tmp[i++] = nums[cur1++];
        while(cur2<=right) tmp[i++] = nums[cur2++];
        //4、还原
        for(int i = left;i<=right;i++)
            nums[i] = tmp[i-left];
    }

这里将tmp数组全局设置,目的是为了减少每次开辟所浪费的时间

看到最后,如果对您有所帮助,还请点赞、收藏和关注,我们下期再见!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目解析
    • 1、将数组排升序
    • 2、在不使用任何内置函数的情况下解决问题
  • 二、算法原理
    • 分治-归并
      • 合并两个有序数组
  • 三、代码示例
    • 这里将tmp数组全局设置,目的是为了减少每次开辟所浪费的时间
  • 看到最后,如果对您有所帮助,还请点赞、收藏和关注,我们下期再见!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档