算法基础-快速排序

news2024/9/24 3:25:41

快速排序

                    

i、j不相邻时,指向同一个下标
i、j相邻时,j 比 i 小

不管是否相邻,最后一次循环的if条件一定是 i>=j 来退出循环,即最后一次的 if(i<j) 不执行


按照 j 来划分,x = a[l + r >> 1],分为 [ l,j ]、[ j + 1, r ]

按照 i 来划分,x = a[l + r + 1 >> 1],分为 [ l,i - 1]、[ i, r ]

i 和 j 相互对应的,记住 j 就行

do i++; while(a[i] < x);
        会使得 a[l..i-1] <= x, a[i] >= x

do j--; while(a[j] > x);
        会使得 a[j+1..r] >= x, a[j] <= x

if(i < j) swap(q[i], q[j]);
        会使得 a[l..i] <= x, a[j..r] >= x

a[ j ] <= x 停住,a[ i ] >= x 停住,交换,a[ j ] >= x,j --

所以循环结束后a[ l ... j ] <= x,a[ j + 1 ... r ] >= x

do while 先自增自减 ,i 从 l - 1 开始, j 从 r + 1 开始

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] a = new int[n];

        for (int i = 0; i < n; i ++ )
            a[i] = in.nextInt();

        quick_sort(a, 0, n - 1);

        for (int i = 0; i < n; i ++ )
            System.out.print(a[i] + " ");

    }
    static void quick_sort(int a[],int l, int r) {
        if(l >= r)
            return;
        int i = l - 1, j = r + 1, x = a[l + r >> 1];
        while(i < j) {
            do {
                i ++;
            }while(a[i] < x);
            do {
                j --;
            }while(a[j] > x);
            if(i < j) {
                int t = a[i];
                a[i] = a[j];
                a[j] = t;
            }

        }
        quick_sort(a,l,j);
        quick_sort(a,j + 1, r);
    }
}

第K个数

根据排序后左右两边的数字个数,选择一边进行查找 

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int k = in.nextInt();
        int[] a = new int[n];

        for (int i = 0; i < n; i ++ )
            a[i] = in.nextInt();

        System.out.println(quick_sort(a, 0, n - 1, k));


    }
    static int quick_sort(int a[],int l, int r, int k) {
        if(l >= r)
            return a[l];
        int i = l - 1;
        int j = r + 1;
        int x = a[l + r >> 1];
        while(i < j) {
            do i ++; while(a[i] < x);
            do j --; while(a[j] > x);
            if(i < j) {
                int t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
        int l_cnt = j - l + 1;
        if(k <= l_cnt)
            return quick_sort(a,l,j,k);
        return quick_sort(a,j + 1, r,k - l_cnt);
    }
}

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

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

相关文章

QGraphicsView、QGraphicsScene和QGraphicsItem图形视图框架(二)疑难杂症

疑难杂症1 1.问题&#xff1a; 设置场景的背景图片时&#xff0c;采用setBackgroundBrush()方法和重写drawBackground()函数得到的结果很不一样&#xff0c;而且通过setSceneRect设置场景原点位置之后得到的结果也有很大区别。 如下图 第一个和第三个中重写了QGraphicsScene…

论文解读:《LAMM: Label Alignment for Multi-Modal Prompt Learning》

系列文章目录 文章目录 系列文章目录LAMM: Label Alignment for Multi-Modal Prompt Learning学习1、论文细节理解1、研究背景2、论文贡献3、方法框架4、研究思路5、实验6、限制 LAMM: Label Alignment for Multi-Modal Prompt Learning学习 1、论文细节理解 VL模型和下游任务…

Python输出多位数

作者制作不易&#xff0c;关注、点赞、收藏一下吧&#xff01; 1.第一种:正常直接用循环 以三位数为例: for i in range(100, 1000):print(i) 运行结果( 展示一部分 ): 图1-1 2.第二种:特定位数 以三位数为例: for i in range(1, 5): # 括号内指定那个位的范围for j in r…

MySQL基础(5)- 运算符

目录 一、算数运算符 1.加法运算符 2.乘除运算符 3.取模运算 二、比较运算符 1. <> <> ! < < > > 2.IS NULL \ IN NOT NULL \ ISNULL 3.LEAST() \ GREATEST() 4.BETWWEEN 条件下界1 AND 条件上界2 5.in (set)\ not in (set) 6.LIKE :模糊查…

96.游戏的启动与多开-窗口多开检测与破解

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 上一个内容&#xff1a;95.游戏的启动与多开-信号量多开检测与破解 以 95.游戏的启动与多开-信号量多开检测与破…

流程图符号速查:快速掌握流程图绘制要点

流程图是一种以图形化方式表示算法或过程的步骤和逻辑关系的图表&#xff0c;它通过使用一系列标准的符号和连接线来清晰地展示流程的顺序和决策点。这种表示方法不仅使得复杂的过程更加易于理解&#xff0c;而且也便于跟踪和优化。以下是对流程图的进一步扩写&#xff0c;包括…

智谱AI八月全面升级

智谱系列升级&#xff1a; GLM-4-Flash&#xff1a;免费供应&#xff0c;提供快速响应的对话体验。GLM-4-Long&#xff1a;超长上下文模型&#xff0c;支持高达1百万tokens的上下文&#xff0c;成本为1元/百万tokens。GLM-4-Plus&#xff1a;旗舰版模型&#xff0c;性能升级&am…

Linux平台屏幕|摄像头采集并实现RTMP推送两种技术方案探究

技术背景 随着国产化操作系统的推进&#xff0c;市场对国产化操作系统下的生态构建&#xff0c;需求越来越迫切&#xff0c;特别是音视频这块&#xff0c;今天我们讨论的是如何在linux平台实现屏幕|摄像头采集&#xff0c;并推送至RTMP服务。 我们知道&#xff0c;Linux平台&…

js模块化 --- commonjs规范 原理详解

什么是commonjs规范 commonjs是一种模块化规范&#xff08;nodejs的默认模块化规范&#xff0c;新版的nodejs已经支持es6的模块化&#xff0c;但它默认任然使用的是commonjs&#xff09;&#xff0c;通俗的说它将代码分割成了一个一个的模块&#xff0c;让不同的模块拥有自己独…

使用“天聚数行”藏头诗生成API:轻松创作个性化诗词

在日常生活中&#xff0c;有时我们需要一些创意的方式来表达情感或增加趣味性。“天聚数行”提供的藏头诗生成API就是一个很好的工具&#xff0c;可以帮助我们轻松创作个性化的诗词。以下是关于如何使用这一API的详细介绍。 API概述 “天聚数行”的藏头诗生成API是上海觉克信息…

别给智能猫砂盆花冤枉钱了!这三款好用智能猫砂盆哪个更好用?

节假日回老家&#xff0c;不方便带猫咪怎么办&#xff1f;而且猫咪这么能拉&#xff0c;猫砂盆里拉满了又怎么办&#xff1f;猫砂盆一满&#xff0c;就会变脏&#xff0c;变脏了小猫就会抗拒上厕所&#xff0c;从而在家里找其他干净的地方排泄&#xff0c;那我们要怎么保证不在…

AIOT边缘计算机助力智慧储能,开启能源管理新时代

智慧储能能源管理正成为实现可持续发展和高效能源利用的关键。而 AIOT&#xff08;人工智能物联网&#xff09;边缘计算机的出现&#xff0c;为智慧储能能源管理带来了全新的机遇和突破。 一、AIOT 边缘计算机的特点 强大的计算能力 AIOT 边缘计算机具备高性能的处理器和充足…

widows安装配置mamba_ssm环境

由于现在mamba大火&#xff0c;所以将mamba_ssm在windows中的环境配置进行介绍&#xff0c;如果你想在windows中进行开发&#xff0c;那么这是你最好的选择&#xff01;&#xff01; 安装步骤 1.anaconda下载 官网下载&#xff1a;https://www.anaconda.com/download 下载好…

Java笔试面试题AI答之JDBC(4)

文章目录 19. 解释JDBC的ResultSet是什么 &#xff1f;20. JDBC编程有哪些不足之处&#xff0c;MyBatis是如何解决这些问题的&#xff1f;JDBC编程的不足之处MyBatis如何解决这些问题 21. 简述JDBC 能否处理 Blob 和 Clob &#xff1f;1. JDBC对Blob和Clob的支持2. 处理Blob和C…

【LeetCode】09.回文数

题目要求 解题思路 主要是提防越界问题 代码实现 class Solution { public:bool isPalindrome(int x) {//处理边界if(x<0) return false;long tempx,ret0;while(temp){retret*10temp%10;temp/10;}return xret;} };

Java并发编程实战 01 | 进程和线程

最早的计算机就像一个新手服务员&#xff0c;只有在接收到每一条指令时才会开始执行。当用户输入指令时&#xff0c;计算机会执行这条指令&#xff0c;然后等待下一条指令。如果用户在思考或者犹豫时&#xff0c;计算机就会乖乖地等待&#xff0c;效率实在是有点低&#xff0c;…

Swagger UI 无法发送 Cookie

文章目录 背景分析解决参考背景 项目中使用 Cookie 传递用户唯一标识,并在 Swagger 中添加 Cookie 作为全局请求参数。 尽管后端配置了 Cookie 请求参数,但在 Swagger UI 中使用 Try it out 发起请求时,发现请求中并没有 Cookie 传递过去。😭 首先,能看到 Curl 上已经有…

高级编程语言翻译例题

编译器的流程 源程序—词法分析—语法分析—语义分析—中间代码生成—代码优化—目标代码生成—目标程序 选项A&#xff1a;先进性词法分析&#xff0c;接着进行语法分析&#xff0c;最后进行语义分析 选项B&#xff1a;语法分析阶段只能发现程序上的语法错误&#xff0c;其…

软考高项通过率最高?!证书价值大吗?什么时候能报考?

近期有省份公布了2024年上半年软考合格人员名单&#xff0c;不少人说软考高项通过率最高&#xff0c;导致一些人十分想报名软考高项&#xff0c;从而拿证书。 那么&#xff0c;软考高项证书价值大吗&#xff1f;什么时候能报考&#xff1f; 1、通过率分析 在浙江公布的2024年…

YOLOv9改进策略【注意力机制篇】| GAM全局注意力机制: 保留信息以增强通道与空间的相互作用

一、本文介绍 本文记录的是基于GAM注意力模块的YOLOv9目标检测改进方法研究。GAM注意力模块通过3D排列和重新设计的子模块&#xff0c;能够在通道和空间方面保留信息&#xff0c;避免了先前方法中由于信息减少和维度分离而导致的全局空间-通道交互丢失的问题。本文利用GAM改进…