CExercise_13_1排序算法_3快速排序算法,包括单向分区以及双向分区

题目:

请手动实现快速排序算法,包括单向分区以及双向分区:

// 单向分区快速排序算法
void quick_sort_one_way(int arr[], int len);
//双向分区快速排序算法
void quick_sort_two_way(int arr[], int len);


关键点


分析:


代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>#define ARR_LEN(arr) (sizeof(arr) / sizeof(arr[0]))#define SWAP(arr, i, j){ \
int tmp = arr[i]; \
arr[i] = arr[j]; \
arr[j]=tmp; \
}void print_arr(int arr[], int len) {printf("[ ");for (int i = 0; i < len; i++) {printf("%d", arr[i]);if (i != len - 1) {printf(", ");}else {printf("]\n");}}
}
// 函数。函数就是分区的。 然后让左边比枢纽值小;右边比它大。 
// 最后返回枢纽值的最终下标。 
int partition(int arr[], int left, int right) {int pivot_index = left;int pivot_value = arr[pivot_index];// 将 pivot_index 换到右边了。 SWAP(arr, pivot_index, right);//  0     1   2   3   4    5     6//  11    8   9   7   12   16   17//                  c_left      c_right// pivot_index = 0;  pivot_value = 12int cur_left = left;int cur_right = right;while (cur_left < cur_right) {// 上来先找左边,找左边的比pivot 大的,弄到后面去。 while (cur_left < cur_right && arr[cur_left] < pivot_value) {cur_left++;}if (cur_left < cur_right) {arr[cur_right] = arr[cur_left];}while (cur_left < cur_right && arr[cur_right] > pivot_value) {cur_right--;}if (cur_left < cur_right) {arr[cur_left] = arr[cur_right];}}arr[cur_left] = pivot_value;return cur_left;
}void partition_recursive(int arr[], int left, int right) {if (left >= right) {// 没数据,或者只有一个数据了。 这时候,我们认为递归结束。 return;}// 核心的代码,其实是 partition。int partition_index = partition(arr, left, right);partition_recursive(arr, left, partition_index - 1);partition_recursive(arr, partition_index + 1, right);
}void quick_sort(int arr[], int len) {// 基本思路: 首先,找到一个枢纽值。 // 然后将比枢纽值小的数, 放在左边; 比枢纽值大的数,放在右边。 // 枢纽的位置,是正确的。  紧接着,继续处理左边的小数组,和右边的小数组。 partition_recursive(arr, 0, len - 1);
}int main(void) {int arr[10] = { 16,1,45,23,99,2,18,67,42,10 };print_arr(arr, ARR_LEN(arr));quick_sort(arr, ARR_LEN(arr));print_arr(arr, ARR_LEN(arr));return 0;
}

解决方案总结:

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

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

相关文章

FPGA-VGA

目录 前言 一、VGA是什么&#xff1f; 二、物理接口 三、VGA显示原理 四、VGA时序标准 五、VGA显示参数 六、模块设计 七、波形图设计 八、彩条波形数据 前言 VGA的FPGA驱动 一、VGA是什么&#xff1f; VGA&#xff08;Video Graphics Array&#xff09;是IBM于1987年推出的…

Linux和Ubuntu的驱动适配情况

旧 一、Linux Yocto3.0 二、Ubuntu 1.驱动 1.rtc正常 2.led正常 3.加密芯片正常 4.硬件看门狗不行&#xff0c;驱动已经适配好&#xff0c;等硬件修复后&#xff0c;直接使用脚本就可以 5.千兆网口可以&#xff0c;两个百兆网口不行 6.USB上面和下面都可以&#xff08;插u盘…

Python 文本和字节序列(处理文本文件)

本章将讨论下述话题&#xff1a; 字符、码位和字节表述 bytes、bytearray 和 memoryview 等二进制序列的独特特性 全部 Unicode 和陈旧字符集的编解码器 避免和处理编码错误 处理文本文件的最佳实践 默认编码的陷阱和标准 I/O 的问题 规范化 Unicode 文本&#xff0c;进行安全的…

【Android学习记录】工具使用

文章目录 一. 精准找视图资源ID1. 准备工作2. 使用 uiautomator 工具2.1. 获取设备的窗口内容2.2. Pull XML 文件2.3. 查看 XML 文件 3. 直接使用 ADB 命令4. 使用 Android Studio 的 Layout Inspector总结 二. adb shell dumpsys activity1. 如何使用 ADB 命令2. 输出内容解析…

Kafka系列之:计算kafka集群topic占的存储大小

Kafka系列之:计算kafka集群topic占的存储大小 topic存储数据格式统计topic存储大小定时统计topic存储大小topic存储数据格式 单位是字节大小 size_bytes{directory="/data/datum/kafka/optics-all" } 782336计算topic存储大小脚本逻辑是: 计算指定目录或文件的大小…

C# 高级编程:Lambda 表达式

在 C# 的高级编程中,Lambda 表达式是一个强大而灵活的工具,广泛应用于 LINQ 查询、委托、事件处理以及函数式编程等多个领域。它不仅使代码更简洁、表达更直接,而且在某些场景中能极大提高代码的可读性与可维护性。本文将从 Lambda 表达式的基本语法入手,深入探讨其原理、常…

《软件设计师》复习笔记(11.5)——测试原则、阶段、测试用例设计、调试

目录 1. 测试基础概念 2. 测试方法分类 3. 测试阶段 真题示例&#xff1a; 题目1 题目2 题目3 4. 测试策略 5. 测试用例设计 真题示例&#xff1a; 6. 调试与度量 真题示例&#xff1a; 1. 测试基础概念 定义&#xff1a;系统测试是为发现错误而执行程序的过程&…

方案解读:虚拟电厂标杆项目整体建设方案【附全文阅读】

在电力市场背景下,传统电力现货市场存在电能定价不合理、分布式电源并网困难等问题。本虚拟电厂标杆项目旨在研究全时间尺度虚拟电厂智能管控关键技术,通过研制虚拟电厂控制器样机、开发运行管理平台,实现对分布式能源的合理优化配置。项目内容涵盖虚拟调控、建设目标、建设…

PyTorch 深度学习实战(37):分布式训练(DP/DDP/Deepspeed)实战

在上一篇文章中&#xff0c;我们探讨了混合精度训练与梯度缩放技术。本文将深入介绍分布式训练的三种主流方法&#xff1a;Data Parallel (DP)、Distributed Data Parallel (DDP) 和 DeepSpeed&#xff0c;帮助您掌握大规模模型训练的关键技术。我们将使用PyTorch在CIFAR-10分类…

OpenAI重返巅峰:o3与o4-mini引领AI推理新时代

引言 2025年4月16日&#xff0c;OpenAI发布了全新的o系列推理模型&#xff1a;o3和o4-mini&#xff0c;这两款模型被官方称为“迎今为止最智能、最强大的大语言模型&#xff08;LLM&#xff09;”。它们不仅在AI推理能力上实现了质的飞跃&#xff0c;更首次具备了全面的工具使…

【AI插件开发】Notepad++ AI插件开发实践:支持配置界面

一、引用 此前的系列文章已基本完成了Notepad的AI插件的功能开发&#xff0c;但是此前使用的配置为JSON配置文件&#xff0c;不支持界面配置。 本章在此基础上集成支持配置界面&#xff0c;这样不需要手工修改配置文件&#xff0c;直接在界面上操作&#xff0c;方便快捷。 注…

Android12 ServiceManager::addService源码解读

源码 Status ServiceManager::addService(const std::string& name, const sp<IBinder>& binder, bool allowIsolated, int32_t dumpPriority) {auto ctx mAccess->getCallingContext();// apps cannot add servicesif (multiuser_get_app_id(ctx.uid) >…

第十四节:实战场景-何实现全局状态管理?

React.createElement调用示例 Babel插件对JSX的转换逻辑 React 全局状态管理实战与 JSX 转换原理深度解析 一、React 全局状态管理实现方案 1. Context API useReducer 方案&#xff08;轻量级首选&#xff09; // 创建全局 Context 对象 const GlobalContext createConte…

第四十八篇 电信行业数仓建设实战指南:从架构设计到场景落地

目录 一、云原生架构设计实战1.1 计算存储分离架构搭建1.2 实时离线融合方案 二、维度建模深度解析2.1 电信业务建模方法论2.2 典型模型设计示例 三、ETL流程优化实践3.1 增量同步技术选型3.2 数据清洗规范 四、核心场景实现方案4.1 用户流失预警模型 五、数据治理实施指南5.1 …

2025年山东燃气瓶装送气工考试真题练习

燃气瓶装送气工考试真题练习 单选题 1、液化石油气主要成分是&#xff08; &#xff09;。 A. 甲烷 B. 丙烷、丁烷 C. 一氧化碳和氢气 答案&#xff1a;B 2、燃气钢瓶搬运过程中&#xff0c;正确的做法是&#xff08; &#xff09;。 A. 滚动钢瓶 B. 踢钢瓶 C. 轻拿轻…

《AI大模型应知应会100篇》第24篇:限定输出格式:如何让AI回答更加结构化

第24篇&#xff1a;限定输出格式&#xff1a;如何让AI回答更加结构化 摘要 在日常使用AI的过程中&#xff0c;我们经常希望得到的不仅仅是“正确”的答案&#xff0c;更是一个清晰、规范、易于处理的回答。无论是生成数据分析报告、代码片段&#xff0c;还是教学内容&#xff…

【MySQL】数据库和表的操作详解

目录 一、数据库&#xff1a; 1、查看数据库&#xff1a; 2、创建数据库&#xff1a; 3、删除数据库&#xff1a; 4、数据库的编码问题&#xff1a; 5、校验规则对数据库的影响&#xff1a; 6、修改数据库&#xff1a; 7、库的备份与恢复&#xff1a; 8、查看链接情况…

Docker--Docker镜像原理

docker 是操作系统层的虚拟化&#xff0c;所以 docker 镜像的本质是在模拟操作系统。 联合文件系统&#xff08;UnionFS&#xff09; 联合文件系统&#xff08;UnionFS&#xff09; 是Docker镜像实现分层存储的核心技术&#xff0c;它通过将多个只读层&#xff08;Image Laye…

双层Key缓存

双层 Key 缓存是一种针对 缓存击穿 和 雪崩问题 的优化方案&#xff0c;其核心思想是通过 主备双缓存 的机制&#xff0c;确保在热点数据过期时仍能提供可用服务&#xff0c;同时降低对数据库的瞬时压力。以下是其核心原理、实现细节及适用场景的深度解析&#xff1a; 一、核心…

力扣每日打卡 2176. 统计数组中相等且可以被整除的数对(简单)

力扣 2176. 统计数组中相等且可以被整除的数对 简单 前言一、题目内容二、解题方法1. 暴力解法2.官方题解官方也是暴力解法 前言 这是刷算法题的第十三天&#xff0c;用到的语言是JS 题目&#xff1a;力扣 2176. 统计数组中相等且可以被整除的数对(简单) 一、题目内容 给你一…