【数组分三段快排】分而治之的快排算法

news2024/11/15 9:44:04

在这里插入图片描述

目录

  • 1.前言
  • 2.题目简介
  • 3.求解思路
  • 4.示例代码

1.前言

算法中的快排

2.题目简介

题目链接:LINK
在这里插入图片描述

3.求解思路

这个题很简单写一个快排就行。

数组分三段(分而治之):但是相对于我们之前写的霍尔版、挖坑法、交换法快排,这个题目可能有很多重复的数字,这些重复的数字无疑会大大提高栈帧消耗,很有可能导致崩溃。于是我们使用数组分三段的方法来做。
在这里插入图片描述
在这里插入图片描述

随机选key:之后为了进一步去优化,我们key值(中间参照值)可以随机取,不仅仅限于三数取中,在某些情况下比三数取中选key略好一点点。

4.示例代码

class Solution {
public:
    vector<int> sortArray(vector<int>& nums) 
    {
        srand(time(nullptr));//种子
        qsort(nums, 0, nums.size() - 1);

        return nums;
    }
        
    void qsort(vector<int>& nums, int begin, int end)
    {
        if(begin >= end) return;

        //1.选择基准值
        int key = getRandom(nums, begin, end);

        //2.数组分三块
        int left = begin - 1, right = end + 1;
        int i = begin;
        while(i < right)
        {
            if(nums[i] < key)
            {
                swap(nums[i++], nums[++left]);
            }
            else if(nums[i] == key)
            {
                i++;
            }
            else //nums[i] > key
            {
                swap(nums[i], nums[--right]);
            }
        }

        //3.对其左右区域依次再次划分三块
        qsort(nums, begin, left);
        qsort(nums, right, end);
    } 

    int getRandom(vector<int>& nums, int left, int right)
    {
        int r = rand();
        return nums[r % (right - left + 1) + left];
    }
};

在这里插入图片描述


EOF

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

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

相关文章

VastBase——全局性能调优

目录 一、系统资源调优 1.内存和CPU 2.网络 3.I/O 二、查询最耗性能的SQL 三、分析作业是否被阻塞 背景&#xff1a;影响性能的因素 系统资源 数据库性能在很大程度上依赖于磁盘的I/O和内存使用情况。为了准确设置性能指标&#xff0c;用户需要了解Vastbase部署硬件的基本…

玉米病害-目标检测数据集(包括VOC格式、YOLO格式)

玉米病害-目标检测数据集&#xff08;包括VOC格式、YOLO格式&#xff09; 数据集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1gNanETxflJwb1SaKut_rQw?pwddio2 提取码&#xff1a;dio2 数据集信息介绍&#xff1a; 共有 5046 张图像和一一对应的标注文件 标注文…

年轻人喝不起蜜雪冰城了

文&#xff5c;琥珀食酒社 作者 | 璇子 告诉你一个残酷的消息 年轻人连卖1块钱冰杯的雪王 都快喝不起了 最近3个月 蜜雪冰城关店3808家 差不多每天要关店43家 Coco奶茶呢 90天关店的数量 比开店的数量多2倍还不止 表面看这是行业太卷 奶茶品牌们在垂死挣扎 但其实…

二、编辑器拓展

一、实现Scene窗口弹出菜单 一、InitializeOnLoadMethod 完成事件监听 设置自定义菜单

嵌入式Qt移植之编译Qt项目-思维导图-学习笔记-基于正点原子阿尔法开发板

嵌入式Qt移植之编译Qt项目 交叉编译器的安装可以参考 http://t.csdnimg.cn/UeHtq 使用交叉编译好的qmake编译Qt项目 将交叉编译工具链的路径添加到环境变量PATH中 !export 交叉编译器位置 查找qmake位置 find -name qmake 进入一个Qt项目&#xff0c;使用qmake生成Make…

反射机制简单基础

前序 在我们没有学习框架之前我们都是通给new来创建对象&#xff0c;如&#xff1a;创建一个我们已知的对象 Car carnew Car(); 调用类中的成员变量和成员方法都是对象直接调用。 在学习了mybatis框架后&#xff0c;我们了解到可以通过类名&#xff0c;能动态得到类中定义的…

【AI学习】在魔塔社区玩Ollama:部署GLM4和CodeGeeX4

看到文章《Ollama可以玩GLM4和CodeGeeX4了&#xff0c;快来魔搭玩起来》&#xff0c;参考的运行了一遍&#xff0c;折腾了一个晚上加一个上午&#xff0c;终于搞定了。本来很简单的事情&#xff0c;对这个代码小白&#xff0c;还是有点坑。。 GPU要明显快很多&#xff0c;CPU的…

谷歌chrome浏览器显示“版本太旧”又无法更新情况下,如何关闭“Chrome版本太旧”提示,包括直接启动Google浏览器,或者通过其他应用启动

问题描述 由于在无互联网环境使用Google浏览器&#xff0c;所以无法进行升级&#xff0c;但每次启动都会有如下提示&#xff0c;作为有强迫症的我实在无法接受。 解决方案 1、修改属性(通过快捷方式启动有效) 通过右键在快捷方式后添加启动参数 右键“Google Chrome”图标…

C的温故而知新:位操作(C Primer Plus第十五章)

第十五章&#xff1a;位操作 这一章的篇幅不是很长&#xff0c;但既然能单独作为一章来讲的话&#xff0c;应该蛮重要的&#xff0c;但是我貌似没有总结出多少需要注意、加强记忆的东西&#xff0c;可见在JAVA的日常开发过程中基本不太遇见有关位操作的内容&#xff0c;所以我…

一起学Java(9)-[日志篇]教你掌握Java日志框架的演进和设计逻辑

在项目开发中&#xff0c;日志记录&#xff08;Logging&#xff09;扮演着至关重要的角色。日志是开发人员 调试代码和诊断问题的重要工具。例如&#xff1a;在生产环境中&#xff0c;开发人员通常无法直接调试代码&#xff0c;日志提供了一个详细的执行轨迹&#xff0c;帮助开…

一篇初学者入门Python文件的读取与写入

我们探讨了如何使用第三方库来扩展我们的Python程序能力.在这一篇教程中,我们将聚焦于Python中文件的读取与写入操作.文件操作是编程中重要的基础,能够有效地帮助我们保存和读取数据。 如果你对Python感兴趣的话&#xff0c;可以试试我整理的这一份全套的Python学习资料&#x…

建筑项目管理软件市场新风向,10款热门软件解析

1、PingCode PingCode 是一款为研发团队设计的全流程管理软件&#xff0c;连续多年入选中国软件项目管理软件榜单前二&#xff0c;是国内研发管理的热门系统。知名客户包括小红书、长城汽车、清华大学、中国电信等。 主要功能 PingCode 核心能力在于支持软件产品研发全生命周…

比requests还好用的Python高效库,效率提升一倍

Python开发者们最常用的库之一就是requests&#xff0c;它以简单易用的API和强大的功能深受喜爱。然而&#xff0c;随着爬取任务的复杂性增加&#xff0c;requests的局限性逐渐显现。一些更为高效、功能更强大的爬虫库开始进入开发者的视野 那么&#xff0c;有没有比requests更…

西北农林科技大学李毅研究员等人在农学顶刊Agric. Syst.发文:持续的干旱威胁着小麦和玉米生产,并将在未来扩大作物产量差

文章简介 论文名称&#xff1a;Concurrent drought threatens wheat and maize production and will widen crop yield gaps in the future &#xff08;持续的干旱威胁着小麦和玉米生产&#xff0c;并将在未来扩大作物产量差&#xff09; 第一作者及单位&#xff1a;Miaolei …

【EMC专题】以太网电路为什么在变压器次级侧加浪涌保护二极管?

以太网广泛应用于工业领域,会受到诸多恶劣条件的影响。一种特别恶劣的条件是 IEC61000-4-5 中强调的瞬态浪涌。浪涌瞬变对这些系统特别危险,因为这代表有较大功率耦合到以太网物理层的发送和接收电路,可能会损坏以太网控制器或 PHY。 以太网物理层包括以太网 PHY(或控制器)…

vue 实现简单AI聊天程序(一) elementui 聊天框编写

这个系列的目标是开发一个AI聊天前端界面后端问答程序&#xff0c; 探索前端界面开发。 尝试后端对接阿里云千问大模型&#xff0c;后续还会更新自己部署的大模型。 这一期用elmentui来开发一个聊天框的前端&#xff0c;根据用户发送的内容&#xff0c;AI会返回一个一模一样的…

中山大学和联想研究院提出文本到服装生成模型GarmentAligner,解决服装生成中语义对齐、数量、位置和相互关系等问题。

中山大学和联想研究院提出一个能够根据文字描述生成服装图像的智能工具GarmentAligner。它可以从已有服装图像中提取出各个组成部分&#xff0c;并记录下它们的位置和数量。接着根据你的描述进行匹配&#xff0c;找出最吻合的服装组件进行组合。而为了确保生成的图像能够准确反…

Nosql数据库redis集群配置详解

一、Redis的安装 环境介绍&#xff1a; 一主双从&#xff1a;10&#xff08;redis-node1&#xff09;主&#xff0c;20&#xff08;redis-node2&#xff09; 30&#xff08;redis-node3&#xff09;从——使用的是红帽9.1系统 源码安装redis [rootredis-node1 ~]# tar zxf red…

【yarn publish : 报错 passed folder/tarball doesn‘t exist 】

当执行yarn publish 时报错&#xff0c;具体命令类似 yarn publish --new-version ${NEW_VERSION} ${my-node-moudle-path}/my-node-modules 报错内容&#xff0c; 网上搜了一圈&#xff0c;基本没有这个报错的相关内容&#xff0c;最后分析并解决了&#xff0c;这里记录分享下…

NoSql数据库 - Redis Cluster集群详解及案例实现

Redis Cluster集群&#xff08;无中心化设计&#xff09; 1.1 Redis Cluster 工作原理 在哨兵sentinel机制中&#xff0c;可以解决redis高可用问题&#xff0c;即当master故障后可以自动将slave提升为master&#xff0c;从而可以保证redis服务的正常使用&#xff0c;但是无法…