快速排序笔记

news2024/12/24 3:18:20

一、quick_sort方法中如果 i=l,j=r 会死循环的分析

1、示例代码

void quick_sort(int a[],int l,int r){
    if(l>=r) return;
    int i=l,j=r; //此处设置会导致死循环
    int x = num[(l+r)>>1];
    while(i<j){
        while(a[++i] <x); //死循环的地方
        while(a[--j] >x);
        if(i<j) swap(a[i],a[j]);
    }

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

2、代码分析

因为数组a默认值都是,i的坐标越过了选中的数x ,并且x往后的数都小于0或者没有明确赋值(此种情况为0)此后a[i]的值都会小于x,导致死循环。而
while(a[--j] >x); 就不会导致因为j往左移终究会变成没有明确赋值的0,所以循环会结束。

3、示例

假如就两个数 98 97,i=1(值97,i坐标往右移动,值变成0,始终小于选出来的数98,导致死循环)

4、心得

算法当中有很多默认值的地方,比如此处的数组a的未明确下标的值都为0,为一个隐含条件,可以帮忙判断是否发生死循环。

二、无限划分的分析

1、重要结论

当以i划分区间,选数不能选到左边界,则a[x] = a[(L+R+1)>>1]
当以j划分区间,选数不能选到右边界,则a[x]=a[(L+R)>>1]

2、逻辑分析

假设选的数是a[x] ,退出循环时,a[l] …a[i-1] 都是a[x];a[j+1]…a[r] 都是>x,a[j]<a[x][x],a[i]>
image-20230826164400548

3、示例

以3 1 2 5 4 这个五个数排序为例:
image-20230826161149245

4、心得

退出循环时的条件判断,有些退出循环时的条件很明确,比如以i划分,选数为L时,退出循环时i=L,但是j就不确定,只能是比L小的某一个位置。对于明确的位置是算法中一些重要判断的条件。

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

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

相关文章

RabbitMQ---订阅模型-Direct

1、 订阅模型-Direct • 有选择性的接收消息 • 在订阅模式中&#xff0c;生产者发布消息&#xff0c;所有消费者都可以获取所有消息。 • 在路由模式中&#xff0c;我们将添加一个功能 - 我们将只能订阅一部分消息。 例如&#xff0c;我们只能将重要的错误消息引导到日志文件…

网站常见安全漏洞 | 青训营

Powered by:NEFU AB-IN 文章目录 网站常见安全漏洞 | 青训营 网站基本组成及漏洞定义服务端漏洞**SQL注入****命令执行****越权漏洞****SSRF****文件上传漏洞** 客户端漏洞**开放重定向****XSS****CSRF****点击劫持****CORS跨域配置错误****WebSocket** 网站常见安全漏洞 | 青训…

软件架构业务及技术复杂度分析总结

目录 一、综述分析 二、业务复杂性分析 &#xff08;一&#xff09;领域建模 &#xff08;二&#xff09;领域分层 &#xff08;三&#xff09;服务粒度 &#xff08;四&#xff09;流程编排 三、技术复杂性分析 &#xff08;一&#xff09;高可用 底层逻辑 CAP原则 …

Mac OS 13.4.1 搜狗输入法导致的卡顿问题

一、Mac OS 系统版本 搜狗输入法已经更新到最新 二、解决方案 解决方案一 在我的电脑上面需要关闭 VSCode 和 Chrmoe 以后&#xff0c;搜狗输入法回复正常。 解决方案二 强制重启一下搜狗输入法。 可以用 unix 定时任务去隔 2个小时自动 kill 掉一次进程 # kill 掉 mac …

EWM怎么取消pinking,SAP_EWM取消拣配报错处理方式

EWM是SAP的一个模块&#xff0c;代表扩展仓库管理&#xff08;Extended Warehouse Management&#xff09;&#xff0c;是SAP企业资源计划&#xff08;ERP&#xff09;的一部分。它提供了一个完整的、高级的仓库管理解决方案&#xff0c;支持企业在全球范围内的仓库管理、订单管…

QGIS学习1-入门学习

QGIS作为一个广受欢迎的开源GIS&#xff0c;很多GIS的学生都了解过。但是因为学校老师都是教的Arcgis&#xff0c;因此很少去充分的学习。QGIS和arcgis一样&#xff0c;有完整的官方帮助文档&#xff0c;我也是要根据官方的帮助文档进行学习等。 https://www.qgis.org/zh-Hans/…

一文看懂Cat.1、Cat.4、NB-IOT、4G之间的区别

01 什么是Cat.1&#xff1f; Cat.1的全称是LTEUE-Category1&#xff0c;其中UE指的是用户设备&#xff0c;它是LTE网络下用户终端设备的无线性能的分类。根据3GPP的定义&#xff0c;UE类别以1-15分为15个等级。Cat.1&#xff0c;可以称为“低配版”的 4G 终端&#xff0c;上行…

微信小程序发布迭代版本后如何提示用户强制更新新版本

在点击小程序发布的时候选择&#xff0c;升级选项 之前用户使用过的再打开小程序页面就会弹出升级弹窗modal

企业博客搭建:经营好企业博客,能让你的业务蹭蹭上涨!

企业博客本身作为企业产品知识的沉淀&#xff0c;搭建并且经营好企业博客不仅有利于企业文化建设&#xff0c;更可以利用博客来推动业务增长。 何谓企业博客营销&#xff1f;简单地说&#xff0c;就是利用HelpLook这种工具创建并开展网络营销活动&#xff0c;称之为博客营销。 …

Linux学习之nginx虚拟域名主机,lsof和netstat命令查看端口是否被监听

需要先参考我的博客《Linux学习之Ubuntu 20.04在https://openresty.org下载源码安装Openresty 1.19.3.1&#xff0c;使用systemd管理OpenResty服务》安装好Openresty。 虚拟域名可以使用让不同的域名访问到同一台主机。 cd /usr/local/openresty切换当前访问目录到/usr/local/o…

stm32之USART(总结)

串行通信 UART串口内部结构示意图 普中科技的详细介绍 中断知识补充 代码 #ifndef __USART_H #define __USART_H #include "stdio.h" #include "stm32f10x_usart.h" #define USART1_REC_LEN 200 //定义最大接收字节数 200extern u8 USART1_RX_BUF[US…

LeetCode--HOT100题(42)

目录 题目描述&#xff1a;108. 将有序数组转换为二叉搜索树&#xff08;简单&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;108. 将有序数组转换为二叉搜索树&#xff08;简单&#xff09; 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xf…

Linux 应用 Segmentation fault 分析手段

前言 本文主要介绍,在Linux 下应用程序发生Segmentation fault 错误时,如何使用gdb 通过core dump文件查找错误具体发生的地方。 一、生成core dump文件 在板子上执行ulimit -c 或者 ulimit -a 命令查看core 文件大小的配置情况,如下图所示 此时 “ core file size ”大小…

芯讯通SIMCOM A7680C (4G Cat.1)AT指令测试 TCP通信过程

A7680C TCP通信 1、文档准备 去SIMCOM官网找到A7680C的AT指令集 AT指令官网 进入官网有这么多AT指令文件&#xff0c;只需要找到你需要用到的&#xff0c;这里我们用到了HTTP和TCP的&#xff0c;所以下载这两个即可。 2、串口助手 任意准备一个串口助手即可 这里我使用的是XC…

EWM是什么

EWM是SAP的一个模块&#xff0c;代表扩展仓库管理&#xff08;Extended Warehouse Management&#xff09;&#xff0c;是SAP企业资源计划&#xff08;ERP&#xff09;的一部分。它提供了一个完整的、高级的仓库管理解决方案&#xff0c;支持企业在全球范围内的仓库管理、订单管…

python+TensorFlow实现人脸识别智能小程序的项目(包含TensorFlow版本与Pytorch版本)

pythonTensorFlow实现人脸识别智能小程序的项目&#xff08;包含TensorFlow版本与Pytorch版本&#xff09; 一&#xff1a;TensorFlow基础知识内容部分&#xff08;简明扼要&#xff0c;快速适应&#xff09;1、下载Cifar10数据集&#xff0c;并进行解压缩处理2、将Cifar10数据…

STL-常用容器-queue 容器(队列)

1 queue 基本概念 概念&#xff1a;Queue是一种先进先出(First In First Out,FIFO)的数据结构&#xff0c;它有两个出口。 队列容器允许从一端新增元素&#xff0c;从另一端移除元素 队列中只有队头和队尾才可以被外界使用&#xff0c;因此队列不允许有遍历行为 队列中进数据…

macbookpro如何清理系统数据 macbookpro怎么删除软件

Macbook Pro是苹果公司的一款高性能笔记本电脑&#xff0c;它拥有强大的硬件和流畅的操作系统。然而&#xff0c;随着时间的推移&#xff0c;你可能会发现你的Macbook Pro变得越来越慢&#xff0c;储存空间也越来越紧张。这时候&#xff0c;你需要对你的Macbook Pro进行一些清理…

CGY-OS 正式开源!【软件编写篇】

上一篇文章&#xff1a;CGY-OS 正式开源&#xff01;_cgy091107的博客-CSDN博客 一、软件编写基础要求 在编写CGY-OS的应用程序之前&#xff0c;您需要&#xff1a; 1. 安装python3.10&#xff0c;配置好CGY-OS。 2.掌握python3的基本语法、lambda表达式、各种简单的数据结构。…

基于Python3 的 简单股票 可转债 提醒逻辑

概述 通过本地的定时轮训&#xff0c;结合本地建议数据库。检查股票可转债价格的同事&#xff0c;进行策略化提醒 详细 前言 为什么会有这么个东西出来呢&#xff0c;主要是因为炒股软件虽然有推送&#xff0c;但是设置了价格之后&#xff0c;看到推送也未必那么及时&#…