当前位置: 首页 > article >正文

算法:快排(三指针算法)

1.三指针算法

在力扣题库中,题型中添加了超大量的重复数据;根本无法使用sort快排,一使用就超时;

三指针快排,是在双指针快排下,提出的优化方案,

无重复数据推荐使用双指针快排;

大量重复数据推荐使用三指针快排;

如果在数据结构章节,已经学会了快排的精髓;三指针代码一看就会;

2.题型

力扣:75、912、215、159;

3.模版代码如下

简单叙述如下:找到nums中的一个数key,将小于key的放在左边,大于key的放在右边;这样key的相对位置就确定了;(如果不理解请看我的一篇文章:数据结构:插入排序)再把小于key的,和大于key的,那两个区域如此排好序;

vector<int> sortArray(vector<int>& nums) {
        srand(time(NULL)); // 种下随机数种子
        quicksort(nums, 0, nums.size() - 1);
        return nums;
    }
    void quicksort(vector<int>& nums, int l, int r) {
        if (l >= r) return;
        // 数据分三块
        int key = getRandom(nums, l, r);
        int i = l, left = l - 1;
        int right = r + 1;
        while (i < right) {
            if (nums[i] < key) {
                left++;
                swap(nums[i], nums[left]);
                i++;
            } else if (nums[i] >key) {
                right--;
                swap(nums[i], nums[right]);
            } else i++;
        }
        //[1,left][left,right-1][right,r]
        quicksort(nums,l,left);
        quicksort(nums,right,r);
    }
    int getRandom(vector<int>& nums, int left, int right) {
        int r = rand();
        return nums[r % (right - left + 1) + left];
    }

4.提示

4.1千万不要相信,数据的绝对随机性;因为数据都是人写出来的,都是伪随机的,或人为排列的;所以只能再次通过种随机数种子伪随机,达到空间和时间复杂度的最小化;


http://www.kler.cn/a/397717.html

相关文章:

  • 效率工具-tig的使用
  • Nginx: 实现Websocket代理
  • 贴代码框架PasteForm特性介绍之markdown和richtext
  • Spring Batch :高效处理海量数据的利器
  • 千益畅行,共享旅游卡市场乱象解析与未来展望
  • Spark RDD sortBy算子什么情况会触发shuffle
  • YashanDB 23.2.3安装过程,并使用DBeaver进行连接
  • 【如何获取股票数据47】Python、Java等多种主流语言实例演示获取股票行情api接口之沪深指数历史分时KDJ数据获取实例演示及接口API说明文档
  • windows C#-创建记录类型(下)
  • Vue3 -- 项目配置之eslint【企业级项目配置保姆级教程1】
  • mysql数据迁移PolarDB
  • ubuntu安装 Pycharm
  • Prometheus面试内容整理-数据持久化和高可用
  • cocosCreator视频web模式播放踩坑解决
  • 分页查询我的课表
  • 性能高于Transformer模型1.7-2倍,彩云科技发布基于DCFormer架构通用大模型云锦天章
  • 什么是Spring Boot Actuator
  • 第二十二章 TCP 客户端 服务器通信 - TCP设备的OPEN和USE命令关键字
  • 【网络云计算】2024第46周周考-磁盘管理的基础知识-RAID篇
  • rust逆向初探
  • Flutter开发应用安装二次打开闪退,ios解决方案
  • AI技术对软件开发带来的发展
  • http自动发送请求工具(自动化测试http请求)
  • mysql中explain之possible_keys、key及key_len介绍
  • HTML之表单学习记录
  • [ 网络安全介绍 1 ] 什么是网络安全?