首页 > 其他分享 >912.排序数组--归并排序

912.排序数组--归并排序

时间:2024-01-18 21:46:55浏览次数:28  
标签:归并 nums -- mid int 数组 排序 912

1.题目介绍

给你一个整数数组 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]

2.题解

2.1 归并排序

思路

归并排序利用了分治的思想来对序列进行排序。对一个长为 n 的待排序的序列,我们将其分解成两个长度为 n/2 的子序列。
每次先递归调用函数使两个子序列有序,然后我们再线性合并两个有序的子序列使整个序列有序。

代码

注意几个点:
1.递归终止条件 l>=r
2.找中点的时候是mid = (l+r)>>1 而不是(l+r)>>2
3.注意给这里的临时数组tmp重新扩容!!!使用resize即可
4.归并归并,就是将分治后两个有序数组融合为一个更大的有序数组

class Solution {
    vector<int> tmp;
    void mergeSort(vector<int> &nums, int l, int r){
        if(l >= r) return;
        int mid = (l + r) >> 1;
        mergeSort(nums, l, mid);
        mergeSort(nums, mid + 1, r);
        int cnt = 0;
        int left = l, right = mid + 1;
        while(left <= mid && right <= r){
            if (nums[left] <= nums[right]) tmp[cnt++] = nums[left++];
            else tmp[cnt++] = nums[right++];
        }
        while(left <= mid) tmp[cnt++] = nums[left++];
        while(right <= r) tmp[cnt++] = nums[right++];
        for(int i = 0; i < cnt; i++){
            nums[l+i] = tmp[i];
        }
    }
public:
    vector<int> sortArray(vector<int>& nums) {
        int n = nums.size();
        tmp.resize(n, 0);
        mergeSort(nums, 0, n-1);
        return nums;
    }
};

标签:归并,nums,--,mid,int,数组,排序,912
From: https://www.cnblogs.com/trmbh12/p/17973472

相关文章

  • 变量常量作用域
    变量常量作用域变量变量就是可以变化的量java是强类型语言,每个变量抖必须声明类型java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域inta=1,b=2,c=3;Stringname="老铁";charx='X';doublepi=3.14;变量作用域//类变量staticstaticd......
  • 2024-1-18文档处理
    目录文档处理文档处理添加到指定元素内部的后面$(A).append(B)//把B追加到A$(A).appendTo(B)//把A追加到B添加到指定元素内部的前面$(A).prepend(B)//把B前置到A$(A).prependTo(B)//把A前置到B添加到指定元素外部的后面$(A).after(B)//把B放到A的后面$(A).insert......
  • 类型转换
    类型转换java是强类型语言,所以进行有些运算的时候,需要用到类型转换低---------------------------------->高byte,short,char-->int-->long-->float-->doubleinti=128;byteb=(byte)i;//内存溢出System.out.println(i);//128System.out.println(b);//-128//强制......
  • Flutter 表单
    Flutter中常见的表单有TextField单行文本框,TextField多行文本框、CheckBox(多选按钮)、Radio(单选按钮)、SwitchCheckboxListTile、RadioListTile、SwitchListTile、Slide。TextField表单的基本用法TextField表单常见属性:示例classTextFieldPageextendsStatefulWidget{......
  • 打包转让保温杯和小米背包,一共80元
    【社区赠品,未拆封】80元转让一个华为logo的车载保温杯,400ml,白色,304不锈钢内胆真空保温杯。保温性能好,三层防烫,食品级PP外层,杯体底部有魔力吸盘,直立可轻松拿起,若受侧方力,则会吸住,不翻倒。再赠送一个价值23.8元的小米10L双肩包【黑色,社区赠品,未拆封】。......
  • 威尔逊定理
    前言一个抽象的事情,我在证欧拉定理的时候,偶然发现了一个式子:\[(p-1)!\bmodp=p-1\]非常的偶然,实际上是证明欧拉定理的时候有一步搞错了,然后不得不想如何把\((p-1)!\bmodp\)消去,然后就很意外的发现了这个式子。当时我不知道他到底是不是成立的,我试了好几个数都是满足的,于是......
  • 第8天:软件运行和包管理工具
    一、软件运行环境1、ABI应用程序的二进制接口window:pelinux:ELF2、库级别的虚拟化linux:WINEWINDOWS:CYGWIN3、API应用开发接口4、开发语言gcc-Ehello.c-ohello.i对hello.c文件进行预处理,生成了hello.i文件gcc-Shello.i-ohell......
  • day6
    今天高数部分练了无穷级数和多元函数微分学部分首先对什么时候加括号什么时候不能加有了更深刻的认识,正向级数可以加括号,收敛级数可以加括号还有无穷级数这一章要经常用到基本不等式通过放缩和n分之一比较大小从而得到敛散性的结论14.4那个a的三分之一次方减去b的三分之一次......
  • 关于复杂度的习题(消失的数字)
    1.0计算斐波那契数列递归fib的空间复杂度//计算斐波那契数列递归fib的空间复杂度longlongFib(size_tN){if(N<3)return1;returnFib(N-1)+Fib(N-2);}注:空间是可以重复利用的,不累计的;但是时间是一去不复返,累计的。递归调用分析:正是因为空间复杂度可以重复利用,所以......
  • mysql8.0索引数据结构
    1、为什么使用索引假如给数据使用二叉树这样的数据结构进行存储,如下图所示2、索引及其优缺点2.1、索引概述2.2、优点(1)类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本,这也是创建索引最主要的原因。(2)通过创建唯一索引,可以保证数据库表中每一行数据的唯一性......