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

排序--快排--非递归法

一,引言

快排不管是hoare法还是指针法以及挖坑法,最终都是利用函数递归进行实现的,但是只要是函数递归就会有栈溢出的风险,为此本篇文章讲解快排的非递归法。

二,代码逻辑

首先要了解为什么会使用递归进行调用,递归调用将大问题进行细分,细分成相同的小问题,依次往复,而对于快排来说,每次的单趟排序的逻辑都是一致的,不一致的仅仅的传入的参数有所不同,为此我们要思考可不可以通过一个数据结构去记录需要的两个参数,需要用到的时候取出来,之后将新的参数再次存进去。进而来依次循环,变相来实现递归的效果。

为此进行引用数据结构----栈,通过栈来存储需要的数据。下面举个例子:

这是零到九,十个数据,假设每次单趟排序经过调整后key都是中间位置。

第一次分组:[0-----4],[5],[6-------9]

如果是递归的逻辑[0------4],[6-------9]分别进行递归函数,但是如果想要走循环就需要将0和4,6和9存起来。如图:

第一次将0和9取出进行如上分组:之后继续进行存储如图:

第二次分组:将0和4取出经行单趟排序:key==2分成[0----1]和[3------4]两组继续存储:
如图:

第三次分组:将0和1取出进行单趟排序:key==0分成[0-----0],[1------1]因为只有一个数据已经是有序的,所以不进行进行存储。

第四次分组:将3和4取出依次类推,直到栈空间为空,则循环结束,排序结束。 

三,代码实现

void QuickSortNo_Re(int* p, int left, int right)
{Stack* m = (Stack*)malloc(sizeof(Stack));StackInit(m);StackPush(m, right);StackPush(m, left);while (StackEmpty(m) == 0){int begin = StackTop(m);StackPop(m);int begin1 = begin;int end = StackTop(m);int end1 = end;StackPop(m);int keys = begin;while (begin != end){while ((p[keys] <= p[end]) && begin != end){end--;}while ((p[keys] >= p[begin]) && begin != end){begin++;}swap(&p[begin], &p[end]);}swap(&p[begin], &p[keys]);keys = begin;if (end1 > keys + 1){StackPush(m, end1);StackPush(m, keys + 1);}if (begin1 < keys-1){StackPush(m, keys - 1);StackPush(m, begin1);}}
}

代码有点长,这里具体解释一下:

这里面的栈的所有引用在栈一章中都有讲解,这里的单趟排序和hoare法一致。需要注意几个点:
1,注意栈是后进先出的数据结构,所以说先进行数组尾部的入栈之后再是数据头部的入栈。 

2,当获取栈顶数据时,要记得获取一个数据后进行Pop操作,以防止获取同一个数据。

3,要多加两个变量进行标记,每次进行这个数据段的头和尾,遗忘之再排序过程中会出现丢失现象。

4,在进行判断是否入栈操作时要记得进行分别判断,具体出两段数据段是不一致的。

四,总结

快排作为非常具有实践意义的算法,熟练掌握各种方法是很重要,希望同学们多加练习都能熟练掌握。

相关文章:

排序--快排--非递归法

一&#xff0c;引言 快排不管是hoare法还是指针法以及挖坑法&#xff0c;最终都是利用函数递归进行实现的&#xff0c;但是只要是函数递归就会有栈溢出的风险&#xff0c;为此本篇文章讲解快排的非递归法。 二&#xff0c;代码逻辑 首先要了解为什么会使用递归进行调用&…...

02 相机标定相关坐标系

标定相关坐标系 一共四个坐标系 图像像素坐标系: u-v,图像左上角为原点图像物理坐标系: x-y,图像中心为原点...

数学建模:MATLAB卷积神经网络

一、简述 卷积神经网络是一种处理具有网格结构数据的深度学习模型&#xff0c;由输入层、卷积层、池化层、全连接层、输出层组成。 输出层&#xff1a;将图像转换为其对应的由像素值构成的二维矩阵&#xff0c;并存储二维矩阵 卷积层&#xff1a;提取图像的底层特征&#xf…...

Android读写权限分析

Android系统使用的是Linux内核&#xff0c;所以Android系统沿用了linux系统的那一套文件读写权限。 目录 1&#xff0c;权限解读1.1&#xff0c;权限分为三种类型&#xff1a;1.2&#xff0c;权限针对的三类对象&#xff1a;1.3&#xff0c;文件和目录的权限区别1.3.1&#xf…...

计算机网络基础:量子通信技术在网络中的应用前景

计算机网络基础:量子通信技术在网络中的应用前景 一、前言二、量子通信技术基础2.1 量子通信的基本概念2.2 量子通信的主要原理2.2.1 量子密钥分发(QKD)原理2.2.2 量子隐形传态原理三、量子通信技术的特点3.1 绝对安全性3.2 超高通信速率潜力3.3 抗干扰能力强四、量子通信技…...

【算法学习计划】贪心算法(上)

目录 前言&#xff08;什么是贪心&#xff09; leetcode 860.柠檬水找零 leetcode 2208.将数组和减半的最少操作次数 leetcode 179.最大数 leetcode 376.摆动序列 leetcode 300.最长递增子序列 leetcode 334.递增的三元子序列 leetcode 674.最长连续递增序列 leetcode …...

Linux 目录结构(文件系统结构)示例说明

在Linux操作系统中&#xff0c;文件系统的结构是理解系统性能及管理的重要基础。每个目录都有它的特定用途&#xff0c;这使得系统管理更加清晰和高效。本文将带您逐步了解每一个重要目录及其功能。 1. 根目录 / 根目录是Linux文件系统的起点&#xff0c;所有文件和目录均从此…...

Linux下的socket演示程序2

server.cpp #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h>#define SER_PORT 8888 //服务器端口号 #define SER_IP "10.148.4.168" //服…...

TiDB与Doris实操对比:深度剖析数据库选型要点

TiDB与Doris实操对比&#xff1a;深度剖析数据库选型要点 宝子们&#xff0c;在大数据处理的广阔天地里&#xff0c;TiDB和Doris都是备受瞩目的数据库解决方案。它们各自有着独特的优势和适用场景&#xff0c;对于我们开发者来说&#xff0c;深入了解它们的实操特性&#xff0…...

How to install vmware workstation pro on Linux mint 22

概述 VMware 是一家专注于虚拟化技术和云计算解决方案的全球领先软件公司&#xff0c;成立于1998年&#xff0c;总部位于美国加州。它的核心技术是通过“虚拟化”将一台物理计算机的硬件资源&#xff08;如CPU、内存、存储等&#xff09;分割成多个独立的虚拟环境&#xff08;…...

redis常用部署架构之redis分片集群。

redis 3.x版本后开始支持 作用&#xff1a; 1.提升数据读写速度 2..提升可用性 分片集群就是将业务服务器产生的数据储存在不同的机器上。 redis分片集群的架构 如上图所示&#xff0c;会将数据分散存储到不同的服务器上&#xff0c;相比于之前来说&#xff0c;redis要处…...

vim的一般操作(分屏操作) 和 Makefile 和 gdb

目录 一. vim的基本概念 二. vim基础操作 2.1 插入模式 aio 2.2 [插入模式]切换至[正常模式] Esc 2.3[正常模式]切换至[末行模式] shift ; 2.4 替换模式 Shift R 2.5 视图&#xff08;可视&#xff09;模式 (可以快速 删除//注释 或者 增加//注释) ctrl v 三&…...

DeepSeek 为何能在短时间内超过 ChatGPT?—— 技术变革与成本重构的双重胜利

2025 年 1 月 27 日&#xff0c;全球科技圈见证了一个历史性时刻&#xff1a;中国 AI 公司深度求索&#xff08;DeepSeek&#xff09;开发的同名应用&#xff0c;首次登顶美国苹果 App Store 免费下载榜&#xff0c;超越了长期霸榜的 ChatGPT。这一突破不仅打破了美国科技公司在…...

Wireshark学习

Wireshark简介 抓包前 1.打开wireshark得到下面的界面 2.选择菜单栏上捕获-> 选项&#xff0c;勾选WLAN网卡&#xff08;这里需要根据各自电脑网卡使用情况选择&#xff0c;简单的办法可以看使用的IP对应的网卡&#xff09;。点击开始。启动抓包。 3.wireshark启动后&am…...

我的创作纪念日——三周年

大家好&#xff0c;心心念念的三年之气已到&#xff0c;但是我似乎对于博客专家的身份没有那么渴望了哈哈。虽然最近比较忙&#xff0c;但是看到三周年纪念日的通知&#xff0c;还是想写一点什么&#xff0c;并不是因为三周年有多么值得纪念&#xff0c;而是这段时间确实有一些…...

Softmax 回归 + 损失函数 + 图片分类数据集

Softmax 回归 softmax 回归是机器学习另外一个非常经典且重要的模型&#xff0c;是一个分类问题。 下面先解释一下分类和回归的区别&#xff1a; 简单来说&#xff0c;分类问题从回归的单输出变成了多输出&#xff0c;输出的个数等于类别的个数。 实际上&#xff0c;对于分…...

基于云服务器的数仓搭建-hive/spark安装

mysql本地安装 安装流程&#xff08;内存占用200M&#xff0c;升至2.1G&#xff09; # 将资料里mysql文件夹及里面所有内容上传到/opt/software/mysql目录下 mkdir /opt/software/mysql cd /opt/software/mysql/ # 待上传文件 install_mysql.sh mysql-community-client-8.0.3…...

YOLO历代发展 图像增强方式 架构

YOLO1 YOLOV5 数据增强 mosaic 仿射变换(Affine)、透视变换(Perspective) 网络搭建...

Spring AI Alibaba EmbeddingModel使用

一、嵌入模型 (Embedding Model)简介 1、核心概念 嵌入模型&#xff08;EmbeddingModel&#xff09;是嵌入过程中采用的模型。 当前 EmbeddingModel的接口主要用于将文本转换为数值向量&#xff0c;接口的设计主要围绕这两个目标展开&#xff1a; 可移植性&#xff1a; 该接口…...

C++入门五式——类和对象(下)

目录 再探构造函数——初始化列表 类型转换 static成员 友元函数 内部类 匿名对象 再探构造函数——初始化列表 之前我们实现构造函数时&#xff0c;初始化成员变量主要使用函数体内赋值&#xff0c;构造函数初始化还有一种方式&#xff0c;就是初始化列表。 //初始化列…...

Spring的SPEL(Spring Expression Language)的使用说明,包含语法、示例和常见场景

以下是Spring的SPEL&#xff08;Spring Expression Language&#xff09;的使用说明&#xff0c;包含语法、示例和常见场景&#xff1a; 1. 基本语法 变量引用 表达式&#xff1a;#{变量名}&#xff08;如#{systemProperties[os.name]}&#xff09;作用域&#xff1a;在Sprin…...

Linux应用:线程进阶

线程同步之信号量 信号量&#xff08;Semaphore&#xff09;是一个整型的计数器&#xff0c;用于控制对共享资源的访问。它通过 PV 操作来实现同步&#xff0c;P 操作将信号量的值减 1&#xff0c;如果值小于 0 则线程阻塞&#xff1b;V 操作将信号量的值加 1&#xff0c;如果…...

策略模式 (Strategy)

策略模式 (Strategy) 应用场景&#xff1a;用于处理不同的任务配置参数。在你的任务中&#xff0c;可能会有不同的任务类型&#xff0c;每个任务类型可能有不同的单位&#xff08;比如米、毫米&#xff09;或不同的处理方式。策略模式可以让你根据不同的任务类型选择不同的处理…...

【YOLOv8】YOLOv8改进系列(10)----替换主干网络之UniRepLKNet

主页&#xff1a;HABUO&#x1f341;主页&#xff1a;HABUO &#x1f341;YOLOv8入门改进专栏&#x1f341; &#x1f341;如果再也不能见到你&#xff0c;祝你早安&#xff0c;午安&#xff0c;晚安&#x1f341; 【YOLOv8改进系列】&#xff1a; YOLOv8改进系列&#xff0…...

mathtype一些用法总结

1.一个是公式旁边加入||&#xff0c;一般使用键盘直接打入的会比较小&#xff0c;mathtype中的会好看很多&#xff0c;打开这个栏目&#xff0c;会看到有很多。 2.另外是带^符号&#xff0c;在字符上面带没有办法直接带&#xff0c;所以可以在mathtype中先加帽子&#xff0c;然…...

1、SQL注入攻击的防范

原文地址: SQL注入攻击的防范 更多内容请关注&#xff1a;代码安全 PHP安全编码——书写安全的代码 1、SQL注入攻击的防范 提问 问题1&#xff1a;什么是SQL注入攻击&#xff1f; 问题2&#xff1a;有几种简单方法防范SQL注入攻击&#xff1f; 问题3&#xff1a;mys…...

核心知识——论文总结

引入 本文我们会针对论文中的核心内容进行总结&#xff0c;加深小伙伴对于Spark的理解。而通过Spark的论文&#xff0c;重点需要掌握理解如下内容&#xff1a; Spark 里核心的 RDD 是一个什么概念&#xff0c;它是通过什么方式来优化分布式数据处理的&#xff0c;它的设计思路…...

HTTP 核心知识点整理

1. HTTP 基础 ​定义&#xff1a;HTTP&#xff08;HyperText Transfer Protocol&#xff09;是应用层协议&#xff0c;基于 ​请求-响应模型&#xff0c;用于客户端&#xff08;浏览器&#xff09;与服务器之间的通信。​特点&#xff1a; ​无状态&#xff1a;每次请求独立&a…...

什么是矩阵账号

矩阵账号是指在同一平台或多个平台上&#xff0c;围绕同一品牌或个人&#xff0c;创建的多个相互关联、协同工作的账号组合。这些账号虽然独立&#xff0c;但在内容定位和运营策略上有所区分&#xff0c;同时又相互引流&#xff0c;共同形成一个网络结构&#xff0c;类似于矩阵…...

【6】VS Code 新建上位机项目---项目分层

【6】VS Code 新建上位机项目---项目分层 1 项目分层(layer)2 项目分层实现数据插入SQL3 项目分层实现 (实体类封装参数)4 项目分层的实现SQL查询数据1 项目分层(layer) 表示层(UI):与用户交互使用。比如按钮,输入信息等;业务层(BLL):传递数据,业务逻辑。根据用户需…...

EspressoSample深度解析:在CircleCI上高效运行Android UI测试

项目背景与简介 EspressoSample项目位于GitHub上的circleci/EspressoSample仓库&#xff0c;该项目旨在展示如何在CircleCI平台上配置和使用Espresso进行Android应用的UI测试。 项目结构与环境准备 项目结构 EspressoSample项目遵循典型的Android项目结构&#xff0c;包含a…...

【每日论文】MetaSpatial: Reinforcing 3D Spatial Reasoning in VLMs for the Metaverse

下载PDF或查看论文&#xff0c;请点击&#xff1a; LlamaFactory - huggingface daily paper - 每日论文解读 | LlamaFactory | LlamaFactory探索LlamaFactory&#xff0c;为你解读AI前沿技术文章&#xff0c;快速掌握最新技术动态https://www.llamafactory.cn/daily-paper/de…...

mac m4 Homebrew安装MySQL 8.0

1.使用Homebrew安装MySQL8 在终端中输入以下命令来安装MySQL8&#xff1a; brew install mysql8.0 安装完成后&#xff0c;您可以通过以下命令来验证MySQL是否已成功安装&#xff1a; 2.配置mysql环境变量 find / -name mysql 2>/dev/null #找到mysql的安装位置 cd /op…...

Java关于多态

多态 字面意思&#xff1a;对象的多种形态。 Student(子类)<-Person(父类)->Teacher(子类) Student snew Student(); 学生形态 对象 代表用new创建一个学生对象赋值给Student 类型&#xff0c;代表Student类型(学生对象)现在是学生形态。 有了多态之后&#xff…...

K8S学习之基础四十六:k8s中部署Kibana

部署kibana组件 上传kibina镜像到harbor 部署kibana组件&#xff0c;包括svc和deplomentvi kibana.yaml apiVersion: v1 kind: Service metadata:name: kibananamespace: kube-logginglabels:app: kibana spec:ports:- port: 5601selector:app: kibana --- apiVersion: apps/…...

如何快速对比两个不同的excel文件中的单元格的数据是否完全相同 并把不同的单元格的背景颜色更改为红色?

要快速对比两个不同的Excel文件中的单元格数据是否完全相同&#xff0c;并将不同的单元格背景颜色更改为红色&#xff0c;可以使用Excel的以下几种方法&#xff1a; 方法一&#xff1a;使用条件格式 打开两个Excel文件。将一个文件的内容复制到另一个文件的新工作表中&#x…...

基于Python+LanceDB实战向量搜索

本篇实战演示向量搜索的实现和示例。 预期效果 给出一个查询的字符串&#xff0c;通过向量搜索&#xff0c;在下面三个语句中搜索出关联性最大的那句。 "熊猫是中国的国宝&#xff0c;主要栖息在四川山区。","长城是古代中国建造的军事防御工事&#xff0c;全…...

多路转接epoll

目录 一、为什么epoll最高效&#xff1f; 二、epoll的三个系统调用 三、理解epoll模型 四、epoll的优点 五、epoll的使用示例 六、epoll的工作模式 ET模式和LT模式的对比 七、epoll的使用场景 总结 一、为什么epoll最高效&#xff1f; 按照 man 手册的…...

AI编程工具哪家强?对比Cusor、Copilot、Cline

前言 AI最先革谁的命&#xff1f;刚毕业参加工作的那个时候就在想是否可以开发一个程序让它自己写代码&#xff0c;在那个遥远的年代&#xff0c;这种想法仿佛就是天方夜谭。但是今天大模型的出现让理想成为了现实。回答前面的问题&#xff0c;AI最先革谁的命&#xff0c;最聪…...

[FPGA基础学习]实现流水灯与按键暂停

FPGA实现LED流水灯 1.vscode的安装和使用 vscode下载 Visual Studio Code - Code Editing. Redefined vscode插件&#xff08;Verilog-HDL/SystemVerilog&#xff09;下载 quartus绑定vscode 2.用6个LED完成周期为1秒的跑马灯效果 流水灯模块设计 时钟输入 DE2-115开发板…...

刷题记录(LeetCode 994.腐烂的橘子)

在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子&#xff1b;值 2 代表腐烂的橘子。 每分钟&#xff0c;腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直到单元格中没有…...

ECharts折线图源码合集1(共18个自定义图表),附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我整理了18个自定义折线图图表&#xff0c;不仅对每个图表代码进行了精简优化&#xff0c;剥离冗余配置项&#xff0c;…...

SQL小菜之TOP N查找问题

前言 SQL的编写是后端面试中非常常见&#xff0c;其中TOP N查找问题也是高频出现的问题&#xff0c;今天我们来看两道SQL TOPN问题。 问题 我们有一张雇员表Employee&#xff1a; CREATE TABLE Employee (id int DEFAULT NULL,salary int DEFAULT NULL,department varchar(…...

蓝桥杯 临时抱佛脚 之 二分答案法与相关题目

二分答案法&#xff08;利用二分法查找区间的左右端点&#xff09; &#xff08;1&#xff09;估计 最终答案可能得范围 是什么 &#xff08;2&#xff09;分析 问题的答案 和 给定条件 之间的单调性&#xff0c;大部分时候只需要用到 自然智慧 &#xff08;3&#xff09;建…...

Css环形旋转立体感动画

Css环形旋转立体感动画 index.html <!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>Css环形旋转立体感动画</title><link rel"stylesheet" href"./style.css">&l…...

音乐极客指南:Melody高音质私有云音乐平台本地部署方案

文章目录 前言1. 添加镜像源2. 本地部署Melody3. 本地访问与使用演示4. 安装内网穿透5. 配置Melody公网地址6. 配置固定公网地址 前言 嘿&#xff0c;各位音乐爱好者们&#xff01;今天我要带大家玩个大招——在香橙派Zero3上搭建你的专属在线音乐平台&#xff0c;还能通过cpo…...

Microi吾码界面设计引擎之基础组件用法大全【内置组件篇·中】

&#x1f380;&#x1f380;&#x1f380; microi-pageengine 界面引擎系列 &#x1f380;&#x1f380;&#x1f380; 一、Microi吾码&#xff1a;一款高效、灵活的低代码开发开源框架【低代码框架】 二、Vue3项目快速集成界面引擎 三、Vue3 界面设计插件 microi-pageengine …...

# WebSocket 与 Socket.IO 对比与优化

核心概念对比 WebSocket 协议性质&#xff1a;HTML5 提供的全双工通信协议 (RFC 6455)连接方式&#xff1a;基于 TCP 的低层协议通信模式&#xff1a;持久化连接&#xff0c;服务端可主动推送协议升级&#xff1a;通过 HTTP 101 状态码切换协议 Socket.IO 协议性质&#xf…...

vue3中,route4,获取当前页面路由的问题

首先应用场景如下&#xff1a; 在main.js里面&#xff0c;引入的是路由的配置文件&#xff0c;如下&#xff1a; import {router} from /router; app.use(router); 路由配置文件router.js如下&#xff1a; import { createRouter, createWebHistory } from vue-router; imp…...

python将整个txt文件写入excel的一个单元格?

要将整个txt文件写入Excel的一个单元格&#xff0c;可以使用Python的openpyxl库来实现。以下是一个简单的示例代码&#xff1a; from openpyxl import Workbook# 读取txt文件内容 with open(file.txt, r) as file:txt_content file.read()# 创建一个新的Excel工作簿 wb Work…...