快速排序hoare版本和挖坑法(代码注释版)

 hoare版本

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>// 交换函数
void Swap(int* p1, int* p2) {int tmp = *p1;*p1 = *p2;*p2 = tmp;
}// 打印数组
void _printf(int* a, int n) {for (int i = 0; i < n; i++) {printf("%d ", a[i]);}printf("\n"); // 添加换行,方便查看结果
}// 快速排序
void QuickSort(int* a, int left, int right) {if (left >= right) { // 递归边界条件:区间只有一个元素或无元素return;}int begin = left, end = right; // 记录当前区间int keyi = left; // 基准值初始为第一个元素的下标while (left < right) {// 从右向左寻找比基准值小的元素while (a[right] >= a[keyi] && left < right) {right--;}// 从左向右寻找比基准值大的元素while (a[left] <= a[keyi] && left < right) {left++;}// 交换左右指针指向的值Swap(&a[left], &a[right]);}// 基准值归位Swap(&a[left], &a[keyi]);keyi = left; // 更新基准值位置// 对左右两部分递归排序QuickSort(a, begin, keyi - 1); // 左部分QuickSort(a, keyi + 1, end);   // 右部分
}int main() {int a[] = { 1, 2, 3, 7, 8, 9, 4, 5, 6 }; // 测试数组int n = sizeof(a) / sizeof(a[0]); // 数组元素个数printf("Before sorting:\n");_printf(a, n); // 输出排序前的数组QuickSort(a, 0, n - 1); // 快速排序printf("After sorting:\n");_printf(a, n); // 输出排序后的数组return 0;
}

测试结果 

 挖坑法

#include <stdio.h>// 交换函数
void Swap(int* p1, int* p2) {int tmp = *p1;*p1 = *p2;*p2 = tmp;
}// 打印数组
void _printf(int* a, int n) {for (int i = 0; i < n; i++) {printf("%d ", a[i]);}
}// 快速排序(挖坑法)
void QuickSort(int* a, int left, int right) {if (left >= right) {return; // 当区间为空或只有一个元素时,递归结束}int begin = left;int end = right;int keyi = a[left]; // 基准值while (left < right) {// 从右向左寻找比基准值小的数while (a[right] >= keyi && left < right) {right--;}if (left < right) {a[left] = a[right]; // 填坑}// 从左向右寻找比基准值大的数while (a[left] <= keyi && left < right) {left++;}if (left < right) {a[right] = a[left]; // 填坑}}// 最后将基准值填入当前坑位a[left] = keyi;// 对左右区间递归排序QuickSort(a, begin, left - 1); // 左区间QuickSort(a, left + 1, end);   // 右区间
}int main() {int a[] = {7, 5, 6, 4, 8, 9, 2, 1, 3, 0};int n = sizeof(a) / sizeof(a[0]);printf("Before sorting:\n");_printf(a, n);printf("\n");QuickSort(a, 0, n - 1);printf("After sorting:\n");_printf(a, n);printf("\n");return 0;
}

测试结果

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

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

相关文章

微信小程序用户登录页面制作教程

微信小程序用户登录页面制作教程 前言 在微信小程序的开发过程中,用户登录是一个至关重要的功能。通过用户登录,我们可以为用户提供个性化的体验,保护用户数据,并实现更复杂的业务逻辑。本文将为您详细讲解如何制作一个用户登录页面,包括设计思路、代码示例以及实现细节…

ROS VSCode调试方法

VSCode 调试 Ros文档 1.编译参数设置 cd catkin_ws catkin_make -DCMAKE_BUILD_TYPEDebug2.vscode 调试插件安装 可在扩展中安装(Ctrl Shift X): 1.ROS 2.C/C 3.C Intelliense 4.Msg Language Support 5.Txt Syntax 3.导入已有或者新建ROS工作空间 3.1 导入工作…

Java 基础面试 题(Java Basic Interview Questions)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

【排序算法】之快速排序篇

思想&#xff1a; 分而治之&#xff0c;通过选定某一个元素作为基准值&#xff0c;将序列分为两部分&#xff0c;左边的序列小于基准值&#xff0c;右边的序列大于基准值&#xff0c; 然后再分别将左序列和右序列进行递归排序&#xff0c;直至每部分有序。 性质&#xff1a;这…

【数据结构】ArrayList与顺序表

ArrayList与顺序表 1.线性表2.顺序表2.1 接口的实现 3. ArrayList简介4. ArrayList使用4.2 ArrayList常见操作4.3 ArrayList的遍历4.4 ArrayList的扩容机制 5. ArrayList的具体使用5.1 杨辉三角5.2 简单的洗牌算法 6. ArrayList的问题及思考 【本节目标】 线性表顺序表ArrayLis…

基于RNNs+Attention的红点位置检测(pytorch)

文章目录 1 项目背景2 数据集3 思路3.1 一些小实验Ⅰ 多通道输入Ⅱ 位置编码Ⅲ 实验结果 3.2 AttentionⅠ Additive AttentionⅡ Dot-Product AttentionⅢ Scaled Dot-Product AttentionⅣ Multi-Head Attention (self-attention)Ⅴ Criss-Cross AttentionⅥ Result 4 代码 1 项…

Android.mk的变量有哪些

Android.mk 文件是 Android 构建系统中用于定义模块和依赖关系的 Makefile 文件。它使用一系列变量来指定源文件、库、编译选项等。以下是一些常用的 Android.mk 变量及其用途&#xff1a; 常用变量 模块名称 LOCAL_MODULE: 模块的名称&#xff0c;必须唯一。 LOCAL_MODULE : …

Jmeter的组件执行顺序

在 Apache JMeter 中,组件的加载和执行顺序遵循一定的规则,但有些组件在同一层级中可能会根据它们在测试计划中的位置来决定具体的执行顺序。以下是这些组件的大致加载和执行顺序,以及哪些组件属于同一层级: 线程组(Thread Group) 线程组是最外层的容器,定义了虚拟用户的…

如何将多个JS文件打包成一个JS文件?

文章目录 前言SDK 打包安装 webpack创建 webpack.config.js编译命令行遇到的坑点前言 上一篇已经记录了如何开发一个小游戏聚合SDK,既然是SDK,最终都是给外部人员使用的。调研了一下市面上的前端SDK,最终都是编译成一个 js 文件。我猜理由大概是 js 文件之间的调用都是需要…

RTSP摄像头、播放器为什么需要支持H.265?

H.264还是H.265&#xff1f; 好多开发者在做选RTSP播放器的时候&#xff0c;经常问我们的问题是&#xff0c;用H.264好还是H.265好&#xff1f;本文我们就H.264 和 H.265的主要区别和适用场景&#xff0c;做个大概的交流。 一、压缩效率 H.265 更高的压缩比 H.265 在相同视频…

Qt桌面应用开发 第八天(读写文件 文件编码 文件流)

目录 1.读文件 2.写文件及编码格式 2.1写文件 2.2编码格式 3.文件信息读取 4.文件流 4.1QTextStream 4.2QDataStream 1.读文件 需求&#xff1a;一个pushButton&#xff0c;点击之后可以选择一个txt文件的路径&#xff0c;路径会显示在lineEdit上&#xff0c;txt文件的…

2411C++,学习C++提示2

C26包索引 template<auto N> consteval auto nth(auto... ts) { return ts...[N]; } static_assert(1 nth<0>(1, 2, 3)); static_assert(2 nth<1>(1, 2, 3)); static_assert(3 nth<2>(1, 2, 3));C26包索引的第1和最后 template <size_t Index,…

chrome允许http网站打开摄像头和麦克风

第一步 chrome://flags/#unsafely-treat-insecure-origin-as-secure 第二步 填入网址&#xff0c;点击启用 第三步 重启 Chrome&#xff1a;设置完成后&#xff0c;点击页面底部的 “Relaunch” 按钮&#xff0c;重新启动 Chrome 浏览器&#xff0c;使更改生效。

IntelliJ IDEA(2024版) 的安装、配置与使用教程:常用配置、创建工程等操作(很详细,你想要的都在这里)

IDEA的安装、配置与使用&#xff1a; Ⅰ、IDEA 的安装&#xff1a;1、IDEA 的下载地址(官网)&#xff1a;2、IDEA 分为两个版本&#xff1a;旗舰版 (Ultimate) 和 社区版 (Community)其一、两个不同版本的安装文件&#xff1a;其二、两个不同版本的详细对比&#xff1a; 3、IDE…

AI前景分析展望——GPTo1 SoraAI

引言 人工智能&#xff08;AI&#xff09;领域的飞速发展已不仅仅局限于学术研究&#xff0c;它已渗透到各个行业&#xff0c;影响着从生产制造到创意产业的方方面面。在这场技术革新的浪潮中&#xff0c;一些领先的AI模型&#xff0c;像Sora和OpenAI的O1&#xff0c;凭借其强大…

基于SpringBoot实现的民宿管理系统(代码+论文)

&#x1f389;博主介绍&#xff1a;Java领域优质创作者&#xff0c;阿里云博客专家&#xff0c;计算机毕设实战导师。专注Java项目实战、毕设定制/协助 &#x1f4e2;主要服务内容&#xff1a;选题定题、开题报告、任务书、程序开发、项目定制、论文辅导 &#x1f496;精彩专栏…

ComfyUI | ComfyUI桌面版发布,支持winmac多平台体验,汉化共享等技巧!(内附安装包)

ComfyUI 桌面版正式推出&#xff0c;支持 Windows 与 macOS 等多平台&#xff0c;为 AI 绘画爱好者带来全新体验。其安装包便捷易用&#xff0c;开启了轻松上手之旅。汉化共享功能更是一大亮点&#xff0c;打破语言障碍&#xff0c;促进知识交流与传播。在操作上&#xff0c;它…

基于 Vue2.0 + Nest.js 全栈开发的后台应用

☘️ 项目简介 Vue2 Admin 是一个前端基于 Ant Design Pro 二次开发&#xff0c;后端基于 Nest.js 的全栈后台应用&#xff0c;适合学习全栈开发的同学参考学习。 &#x1f341; 前端技术栈&#xff1a; Vue2、Ant Design Vue、Vuex &#x1f341; 后端技术栈&#xff1a; Ne…

Flink 离线计算

文章目录 一、样例一&#xff1a;读 csv 文件生成 csv 文件二、样例二&#xff1a;读 starrocks 写 starrocks三、样例三&#xff1a;DataSet、Table Sql 处理后写入 StarRocks四、遇到的坑 <dependency><groupId>org.apache.flink</groupId><artifactId&…

深度学习视频编解码开源项目介绍【持续更新】

DVC (Deep Video Compression) 介绍&#xff1a;DVC (Deep Video Compression) 是一个基于深度学习的视频压缩框架&#xff0c;它的目标是通过深度神经网络来提高视频编码的效率&#xff0c;并降低比特率&#xff0c;同时尽可能保持视频质量。DVC 是一个端到端的神经网络模型&…