首页 > 其他分享 >快速排序

快速排序

时间:2024-12-07 13:53:48浏览次数:9  
标签:right cur int vector pair 排序 快速 left

[Algo] 快速排序

1. 经典随机快排

// 1. 经典随机快排
void swapByIndex(vector<int> &v, int x, int y)
{
    int tmp = v[x];
    v[x] = v[y];
    v[y] = tmp;
}
pair<int, int> partition(vector<int> &v, int left, int right, int x)
{
    int first = left, last = right, cur = left;
    while (cur <= last)
    {
        if (v[cur] < x) swapByIndex(v, cur++, first++);
        else if (v[cur] > x) swapByIndex(v, cur, last--);
        else cur++;
    }
    return make_pair(first, last);
}
void quickSort(vector<int> &v, int left, int right)
{
    if (left >= right) return;
    int x = v[rand() % (right - left + 1) + left];
    pair<int, int> p = partition(v, left, right, x);
    quickSort(v, left, p.first - 1);
    quickSort(v, p.second + 1, right);
}

2. 随机选择(第k大的数)

// 2. 第k大的数
int findTopK(vector<int> &v, int k)
{
    if (k <= 0 || k > v.size()) return -1;
    int index = v.size() - k;
    int left = 0, right = v.size() - 1;
    while (1)
    {
        int x = v[rand() % (right - left + 1) + left];
        pair<int, int> p = partition(v, left, right, x);
        if (p.first <= index && index <= p.second) return v[index];
        else if (index < p.first) right = p.first - 1;
        else left = p.second + 1;
    }
    return -1;
}

标签:right,cur,int,vector,pair,排序,快速,left
From: https://www.cnblogs.com/yaoguyuan/p/18592114

相关文章

  • [码码哈哈]2024-12月最新JDK8、11、17、21国内免登录快速下载
    现有LTS版本截至2024年,JDK的LTS版本包括:JDK8(发布于2014年3月):这是一个非常流行的LTS版本,很多老旧系统仍在使用。JDK11(发布于2018年9月):引入了一些新特性和改进,并成为许多企业的首选。JDK17(发布于2021年9月):提供了对Java语言和平台的一系列增强和改......
  • EasyCoding敏捷开发平台-需求排序和规划
    已创建需求,需求状态为新建或进行中状态,且需求所属的团队或领域信息,与左上角的团队或领域一致。需求状态为完成或取消(作废)状态,且非本团队或领域的需求不在所有工作项列表展示。操作步骤1.登录EasyCoding控制台。2.选中一个工作区,并进入项目工作区。3.点“工作项->Backlog”,......
  • 数据结构6.1--插入排序
    目录1.基本思想1.2直接插入排序1.3希尔排序(缩小增量排序)1.基本思想直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。实际中我们玩扑克牌,就用......
  • 探索Volc Engine MaaS:快速入门指南
    探索VolcEngineMaaS:快速入门指南VolcEngine的MaaS(ModelasaService)是一种强大的服务,允许开发者使用其LLM(大语言模型)实现多种自然语言处理任务。在这篇文章中,我们将指导您如何开始使用VolcEngine的MaaS模型,通过简单的步骤和代码示例展示其应用。1.引言VolcEngine......
  • 堆排序(c基础)
    voidMaxHeap(int*H,inti,intN){ intl=2*i+1; intr=2*i+2; intmax; if(l<N&&H[l]>H[i])max=l; elsemax=i; if(r<N&&H[r]>H[max])max=r; inttemp=0; if(max!=i) { intp=H[i];......
  • 解题报告-论对“排序”的新理解
    解题报告-论对“排序”的新理解这样排序的问题,一般都是多次排序,然后查询一个位置。这也就意味着,这样的题一般有多样的特殊性质。如果我们多次暴力排序,那么复杂度可以近似\(O(nm\logn)\),肯定是不行的。这个时候,我们就要拿出针对这种题的\(\texttt{Trick}\)——\(01\)序列。......
  • 减少30%人工处理时间,AI OCR与表格识别助力医疗化验单快速处理
    在医疗行业,化验单作为重要的诊断依据和数据来源,涉及大量的文字和表格信息,传统的手工输入和数据处理方式不仅繁琐,而且容易出错,给医院的运营效率和数据准确性带来较大挑战。随着人工智能技术的快速发展,OCR(光学字符识别)与表格识别技术的应用,为医疗行业提供了高效的解决方案。思通数科......
  • 打造智能翻译助手:ChatMistralAI快速入门
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习......
  • VS下网络快速连接检测实现
    一.问题:  VS实现PC软件和单片机的网络连接的时候,如果网线没有插入,检测连接失败,一般设置网络连接为非阻塞方式,但是如果单片机返回比较慢,会导致正常情况下也连不上,下面代码通过设置等待方法解决此问题二.代码如下:1.连接代码    WSADATAwsaData;    g_Socket=......
  • [快速入门Chroma向量数据库:提升开发者生产力的神器]
    快速入门Chroma向量数据库:提升开发者生产力的神器引言在当今的AI开发中,灵活且高效的向量数据库成为了必不可少的工具。Chroma作为一个AI原生的开源向量数据库,旨在提升开发者的生产力和幸福感。本文将介绍Chroma的基本用法,帮助你快速上手这一工具。主要内容设置要开始使......