LeetCode[912]排序数组

news2024/9/22 2:05:21

难度:Medium

 题目:

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

Related Topics

  • 数组
  • 分治
  • 桶排序
  • 计数排序
  • 基数排序
  • 排序
  • 堆(优先队列)
  • 归并排序

 重点!!!解题思路

第一步:

 明确解题思路:使用排序来解决此题,模仿c++中的STL的快速排序思想来解决此题

第二步:

我们使用一个快速排序来对待排序数组进行分区 

       最后分区以后使用一个插入排序来进行最后的调整

源码+解析:

class Solution {
        public int[] sortArray(int[] nums) {
            quick_sort(nums,0,nums.length-1); //执行快速排序,传入参数
            return nums;
        }
        public void quick_sort(int[] nums,int l,int r){  
            __quick_sort(nums,l,r);  //接收参数进行快速排序
            final_insert_sort(nums,l,r);  //最后收尾进行插入排序
        }
        public void __quick_sort(int[] nums,int l,int r){
            while (r-l>16){  //模仿STL的快速排序,当待排序数组长度大于16时进行操作
                int i=l,j=r,m=median(nums[l],nums[r],nums[(l+r)/2]); //找到一个中间值,这个值不要求非常准确,只需要保证它不是最大值,也不是最小值即可
                do {
                    while (nums[i]<m) i++;
                    while (nums[j]>m) j--;
                    if (i<=j){   //执行到这步相当于num[i]>m,num[j]<m 说明顺序不对,需要换一下
                        swap(nums,i,j);
                        i++;
                        j--;
                    }
                }while (i<=j);
                __quick_sort(nums,i,r);  //这步很重要,思想为单边递归,右面进行递归,左面进行循环
                r=j;  //这步其实相当于__quick_sort(nums,l,j) 虽说是相当于 但实际不进行递归操作,进行循环操作加快程序运行速度
            }
        }
        public void final_insert_sort(int[] nums,int l,int r){ //插入算法同理
            int ind=l;
            for (int i=l+1;i<=r;i++){  //我们先确nums中的最小值,这样我们待排序数组的有序区间就增加了,可以保证排序后的正确性,减少了程序的运行次数,优化插入排序的性能
                if (nums[i]<nums[ind]){
                    ind=i;
                }
            }
            while (ind>l){
                swap(nums,ind,ind-1);
                ind--;
            }
            for (int i=l+2;i<=r;i++){  //因为第一个位置已经确定是最小值
                int j=i;
                while (nums[j]<nums[j-1]){
                    swap(nums,j,j-1);
                    j--;
                }
            }
        }
        public void swap(int[] nums,int l,int r){
            int t=nums[l];
            nums[l]=nums[r];
            nums[r]=t;
        }
        public int median(int a,int b,int c){
            int max=Math.max(a,Math.max(b,c));
            int min=Math.min(a,Math.min(b,c));
            if (a!=max && a!=min) return a;
            if (b!=max && b!=min) return b;
            return c;
        }
    }

 运行结果:

系列持续更新中,喜欢练习算法的那就点个攒吧  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/735913.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Openlayers实战:显示海量数据

Openlayers地图中通常的加载方式是canvas,另外还一种加载方式是webGL,在绘制海量数据时,使用GPU进行绘制可有效减少CPU的负载,提升绘制时的速度在浏览器中,可以使用WebGL的方式与GPU交互。 在本实战中,使用WebGLPoints显示海量数据。 效果图 源代码 /* * @Author: 大剑…

表单标签from

七、表单标签 form text name属性必须添加&#xff0c;否则后端不知道这个值是什么意思。且name不能重复 添加label主要是方便程序员&#xff0c;一看到用户名称这个label就是为username的&#xff0c;添加或者不添加页面效果一样 2、possword 用户密码显式出来&#xff0c;所…

与一款医疗仪器的往事

这是一款比较冷门的医疗仪器&#xff0c;SOD型多普勒脐动脉血流检测仪。 大约是20年前&#xff0c;有个朋友找到了俺&#xff0c;让俺给他写一个医疗仪器的软件。当时这个仪器是这样子的。这是唯一还能找到的当时的图片。朋友要求用C写。俺就选择了C Builder&#xff0c;比用VC…

vue源码阅读之什么是虚拟dom

前面简单说过数据响应式原理&#xff0c;大体是个怎么流程&#xff0c;数据发生变化&#xff0c;我们界面如何更新。 依赖收集收集的是watcher&#xff0c;然后当数据发生变化的时候dep通知watcher&#xff0c;然后watcher负责updateComponent。 那么更新组件过程中&#xff…

PostgreSQL查询引擎——上拉子链接SubLink

子查询是查询语句中经常出现的一种类型&#xff0c;是比较耗时的操作。优化子查询对查询效率的提升有直接的影响。从子查询出现在SQL语句的位置看&#xff0c;它可以出现在目标列、FROM子句、WHERE子句、JOIN/ON子句、GROUPBY子句、HAVING子句、ORDERBY子句等位置。子查询出现在…

c语言指针进阶(一)

大家好&#xff0c;我是c语言boom成家宝。今天为大家分享的是c语言中很重要的一个知识点------指针的深入讲解。 目录 指针 指针数组 数组指针 函数指针 什么是指针&#xff1f; 首先&#xff0c;指针的本质是一个地址&#xff0c;指针在32位机器上的大小是4个字节&a…

python_day3_str

字符串str 按索引下标查找 str Hi, world, follow, admin print(str[0]) print(str[-1])index() str Hi, world, follow, admin print(str.index(world)) #首字母下标 print(str.index(w))字符串.replace&#xff08;字符串1&#xff0c;字符串2&#xff09;&#xff1a;…

【Linux】高级IO(二)

文章目录 高级IO&#xff08;二&#xff09;I/O多路转接之pollpoll服务器 I/O多路转接之epollepoll相关函数epoll工作原理epoll回调机制epoll服务器epoll的优点 高级IO&#xff08;二&#xff09; I/O多路转接之poll poll也是系统提供的一个多路转接接口 poll系统调用也可以…

ruoyi若依 组织架构设计--[ 部门管理 ]

ruoyi若依 组织架构设计--[ 部门管理 ] 部门管理部门查询部门新增部门修改部门删除 部门管理 部门查询 需要注意的是&#xff0c;部门管理也有数据权限&#xff0c;比如A用户分配的数据权限(通过角色分配)是深圳总公司&#xff0c;那么A用户登录后看到的部门也是深圳总公司&am…

2023年前端面试题汇总-数据结构(二叉树)

对于树这个结构,最常见的就是二叉树。我们除了需要了解二叉树的基本操作之外,还需要了解一些特殊的二叉树,比如二叉搜索树、平衡二叉树等,另外还要熟悉二叉树的遍历方式,比如前序遍历、中序遍历、后序遍历、层序遍历。另外还要知道二叉树的常用遍历的方式:深度优先遍历和…

非线性优化知识

这里列下最小二乘的四种解法的优缺点&#xff0e; #mermaid-svg-CLbQz6o8j7JMq9MM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-CLbQz6o8j7JMq9MM .error-icon{fill:#552222;}#mermaid-svg-CLbQz6o8j7JMq9MM .err…

前端开发中的单例模式

在前端开发中&#xff0c;单例模式是一种常见的设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。 在JavaScript中&#xff0c;可以使用以下几种方式来实现单例模式&#xff1a; 字面量方式&#xff1a; const singleton {// …

JVM 调优测试Jmeter 压测

Jmeter 内存不足了&#xff0c;修个5个线程吧 测试结果&#xff1a; Jmeter配置参数 5个线程&#xff0c;每个线程1秒跑1000次 测试串行吞吐量 -XX:PrintGCDetails -Xmx128M -Xms128M -XX:HeapDumpOnOutOfMemoryError -XX:UseSerialGC -XX:PermSize32M GC回收4次 吞吐量138…

SQL Server 2008每天自动备份数据库

在SQL Server 2008数据库中。为了防止数据的丢失我们就需要按时的来备份数据库了。要是每天都要备份的话&#xff0c;人工备份会很麻烦的&#xff0c;自动备份的话就不需要那么麻烦了&#xff0c;只要设置好了&#xff0c;数据库就会自动在你设置的时间段里备份。那么自动备份要…

ihrm项目结构详解

大体介绍 云服务的三种模式 Iaas&#xff1a;基础设施即服务 Pass&#xff1a;平台即服务 Saas&#xff1a;软件即服务 系统设计 主键id生成策略 lombok data setter getter noArgs&#xff08;无参构造&#xff09; 模块搭建 1 企业得增删改查 2 全局异常处理器 3 跨域…

选择排序算法介绍

算法介绍 选择排序&#xff08;Selection Sort&#xff09;是一种简单直观的排序算法。它的基本思想是每次从待排序的元素中选取最小&#xff08;或最大&#xff09;的元素&#xff0c;放到已排序部分的末尾&#xff0c;直到全部元素排序完毕。 以下是选择排序的详细步骤&…

【实战】 六、用户体验优化 - 加载中和错误状态处理(下) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(十)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理1~234.用useAs…

java实现一个简单的webSocket聊天demo

java实现一个简单的webSocket聊天demo 一、依赖二、配置准备三、demo代码编写四、启动测试五、编写业务 一、依赖 添加pom文件依赖 <!-- websocket--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter…

IDEA环境配置汇总

1、配置项目编码 2、配置运行看板Services IDEA开启并配置Services窗口 这里已经配置好了&#xff0c;如果没有&#xff0c;就点击&#xff0c;点击Run Configuration Type&#xff0c;选择所需要的&#xff0c;点击即可。 配置spring与docker看板(按照上面的方法来配置&am…

【Python】查询SQL并用柱状图展示

需求&#xff1a; 查询2022年各月订单量&#xff0c;并用柱状图展示 SQL&#xff1a; select date_format(create_time,%Y-%m) as mon ,count(distinct order_id) as ord_cnt from prod.order_info where date_format(create_time,%Y-%m) between 2022-01 and 2022-12 group…