快速排序 -非递归版-双指针版

个人主页点这里~


非递归法:

快速排序的非递归实现涉及到使用一个来模拟递归调用栈。

因为递归调用内存的栈区一般只有8M,如果数据很多则容易栈溢出(不过现在硬件基本不会),而使用数据结构的栈来模拟实现递归是调用堆区,一般右2G.


//得到key
int QuickSort1(int* a, int left, int right)
{int pre = left;int cur = left + 1;int key = left;while (cur <= right){if (a[cur] < a[key] && ++pre != cur){Swap(&a[cur], &a[pre]);}cur++;}Swap(&a[pre], &a[key]);return pre;
}

我们利用栈后进先出这一特性,先压右,再压左,那么就先得到左在得到右

// 快速排序 非递归实现
void QuickSortNonR(int* a, int left, int right)
{//后进先出Stack st;StackInit(&st);StackPush(&st, right);StackPush(&st, left);while (!StackEmpty(&st)){int begin = StackTop(&st);//左区间StackPop(&st);int end = StackTop(&st);//右区间StackPop(&st);int key = QuickSort1(a, begin, end);if (key + 1 < end)//如果右区间存在{StackPush(&st, end);StackPush(&st, key + 1);}if (begin < key - 1)//如果左区间存在{StackPush(&st, key - 1);StackPush(&st, begin);}}StackDestroy(&st);
}

双指针法:

void quicksort(int* a, int left, int right)
{if (left >= right){return;}int pre = left;int cur = left + 1;int mid = getmid(a, left, right);Swap(&a[mid], &a[left]);int key = left;while (cur <= right){if (a[cur] < a[key] && ++pre != cur){Swap(&a[pre], &a[cur]);}cur++;}Swap(&a[key], &a[pre]);key = pre;quicksort(a, left, key - 1);quicksort(a, key + 1, right);
}

分享到这~

复习经典快排 快速排序-Hoare 递归版 C语言-CSDN博客

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

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

相关文章

Sui Bridge在测试网上线并推出10万SUI激励计划

是一种为Sui设计的原生桥接协议&#xff0c;专门用于在Sui与其他网络之间桥接资产和数据。今天&#xff0c;Sui Bridge宣布在测试网上线。作为一种原生协议&#xff0c;Sui Bridge能够在Ethereum和Sui之间轻松且安全地转移ETH、wBTC、USDC和USDT&#xff0c;使其成为Sui基础设施…

ARM-V9 RME(Realm Management Extension)系统架构之功耗管理

安全之安全(security)博客目录导读 目录 一、系统功耗管理 1、功耗状态 2、PE功耗管理 3、系统和PE集群功耗管理 4、系统功耗状态 二、RME组件功耗管理 本节规定了RME系统的功耗管理规则。 功耗管理流程定义了系统及其组件如何在各种电源状态之间进行转换&#xff0c;以…

论文研读|以真实图像为参考依据的AIGC检测

前言&#xff1a;这篇文章介绍几篇AIGC检测的相关工作&#xff0c;其中前几篇文章是以真实图像的特征作为标准进行检测&#xff0c;最后一篇文章就当拓展一下知识边界吧&#xff5e; 目录 Detecting Generated Images by Real Images Only (202311 arXiv)Let Real Images be as…

代码随想录算法训练营第37天|● 56.合并区间● 738.单调递增的数字

合并区间 56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 按照左边界从小到大排序之后&#xff0c;如果 intervals[i][0] < intervals[i - 1][1] 即intervals[i]的左边界 < intervals[i - 1]的右边界&#xff0c;则一定有重叠。&#xff08;本题相邻区间也算重贴…

SpringBoot整合H2数据库并将其打包成jar包、转换成exe文件

SpringBoot整合H2数据库并将其打包成jar包、转换成exe文件 H2 是一个用 Java 开发的嵌入式数据库&#xff0c;它的主要特性使其成为嵌入式应用程序的理想选择。H2 仅是一个类库&#xff0c;可以直接嵌入到应用项目中&#xff0c;而无需独立安装客户端和服务器端。 常用开源数…

Linux Debian12使用podman安装pikachu靶场环境

一、pikachu简介 Pikachu是一个带有漏洞的Web应用系统&#xff0c;在这里包含了常见的web安全漏洞。 二、安装podman环境 Linux Debian系统如果没有安装podman容器环境&#xff0c;可以参考这篇文章先安装podman环境&#xff0c; Linux Debian11使用国内源安装Podman环境 三…

【Numpy】一文向您详细介绍 np.trunc()

【Numpy】一文向您详细介绍 np.trunc() 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&#xff0c;…

[数据集][目标检测]中国象棋检测数据集VOC+YOLO格式300张12类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;300 标注数量(xml文件个数)&#xff1a;300 标注数量(txt文件个数)&#xff1a;300 标注类别…

Django后台忘记管理员的账号

使用命令启动项目&#xff1a; python manage.py runserver输入后缀/admin&#xff0c;进入后台管理员&#xff0c;如果此时忘记你先前设置的用户名与密码怎么办&#xff1f; 终端输入&#xff1a; python manage.py shell 输入以下内容&#xff0c;并查看返回结果&#xff…

用【R语言】揭示大学生恋爱心理:【机器学习】与【深度学习】的案例深度解析

目录 第一部分&#xff1a;数据收集与预处理 1.1 数据来源 1.2 数据清洗 1.3 数据探索性分析 第二部分&#xff1a;特征工程与数据准备 2.1 特征选择 2.2 特征提取 第三部分&#xff1a;机器学习模型 3.1 逻辑回归模型 3.2 决策树模型 第四部分&#xff1a;深度学习…

ui自动化中,隐式等待和显示等待什么时候使用

隐式等待 在页面刷新加载时&#xff0c;页面元素还没有出来&#xff0c;这个时候如果去找元素就会找不到报错 或者点了一个菜单&#xff0c;页面加载时 用笨办法&#xff0c;就是用sleep等待固定的时间&#xff0c;这种浪费的时间比较多&#xff0c;就可以用隐式等待&#xf…

美业门店管理系统Java源码分享-【库存管理】的功能和作用

美业收银系统在美容行业中的作用和重要性体现在提高管理效率、提升客户满意度、降低成本、促进业务增长等方面。它为连锁美业提供了一个全面的管理工具&#xff0c;能够更好地应对市场挑战&#xff0c;提升竞争力。 美业系统中的【库存管理】在整个美容行业中起着非常重要的作…

【SpringCloud学习笔记】RabbitMQ(中)

1. 交换机概述 前面《RabbitMQ上篇》我们使用SpringAMQP来演示如何用Java代码操作RabbitMQ&#xff0c;当时采用的是生产者直接将消息发布给队列&#xff0c;但是实际开发中不建议这么多&#xff0c;更加推荐生产者将消息发布到交换机(exchange)&#xff0c;然后由exchange路由…

护眼台灯攻略:护眼台灯真的有用吗?

当前&#xff0c;近视问题在人群中愈发普遍&#xff0c;据2024年的统计数据显示&#xff0c;我国儿童青少年的总体近视率已高达52.7%。近视的人越来越多&#xff0c;近视背后还潜藏着视网膜脱离、白内障、开角型青光眼等眼部疾病&#xff0c;严重的情况甚至可能引发失明。长时间…

P3388 【模板】割点(割顶)

题目背景 割点 题目描述 给出一个 n 个点&#xff0c;m 条边的无向图&#xff0c;求图的割点。 输入格式 第一行输入两个正整数 n,m。 下面 m 行每行输入两个正整数 x,y 表示 x 到 y 有一条边。 输出格式 第一行输出割点个数。 第二行按照节点编号从小到大输出节点&am…

CNAS认证是什么?怎么做?

在全球化日益深入的今天&#xff0c;产品质量和安全已经成为企业生存和发展的重要基石。而在这个过程中&#xff0c;CNAS认证作为一种权威性的认可机制&#xff0c;发挥着不可替代的作用。那么&#xff0c;CNAS认证究竟是什么&#xff1f;我们又该如何进行这一认证过程呢&#…

【MySQL】表的基本增删查改(结合案例)

文章目录 1.前言2.插入数据&#xff08;Create&#xff09;2.1案例2.2单行数据全列插入2.3多行数据指定列插入2.4插入否则更新2.5替换 3. 读取数据(Retireve)3.1案例3.2全列查询3.3指定列查询3.4查询字段为表达式3.5为查询结果起别名3.6去重3.7where条件3.7.1案例 3.8排序3.9筛…

算法刷题【二分法】

题目&#xff1a; 注意题目中说明了数据时非递减的&#xff0c;那么这样就存在二分性&#xff0c;能够实现logn的复杂度。二分法每次只能取寻找特定的某一个值&#xff0c;所以我们要分别求左端点和有端点。 分析第一组用例得到结果如下: 成功找到左端点8 由此可知&#xff0…

[数据集][目标检测]胸部解剖检测数据集VOC+YOLO格式100张10类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;100 标注数量(xml文件个数)&#xff1a;100 标注数量(txt文件个数)&#xff1a;100 标注类别…