快速排序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;
}

测试结果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C5.【C++ Cont】getchar,putchar和scanf

目录 1.回顾C语言文章24.【C语言】getcha和putchar的使用 2.C中和C语言不同的地方 3.关键点 4.scanf 5.练习1 题目描述 输入描述: 输出描述: 输入 输出 6.练习2 题目描述 输入格式 输出格式 输入输出样例 说明/提示 1.回顾C语言文章24.【C语言】getcha和putchar…

深入理解 AI 产品的核心价值——《AI产品经理手册》

现在&#xff0c;人们对AI 充满了兴趣和看法。这些年&#xff0c;我亲身经历了对AI 的感受和认识的此起彼伏。我还是学生时&#xff0c;就对AI 以及伴随而来的第四次工业革命感到无比激动和期待。然而&#xff0c;当我开始组织读书会&#xff0c;每月阅读有关AI 的书籍&#xf…

Spring Boot拦截器(Interceptor)详解

拦截器Interceptor 拦截器我们主要分为三个方面进行讲解&#xff1a; 介绍下什么是拦截器&#xff0c;并通过快速入门程序上手拦截器拦截器的使用细节通过拦截器Interceptor完成登录校验功能 1. 快速入门 什么是拦截器&#xff1f; 是一种动态拦截方法调用的机制&#xff…

python代码示例(读取excel文件,自动播放音频)

目录 python 操作excel 表结构 安装第三方库 代码 自动播放音频 介绍 安装第三方库 代码 python 操作excel 表结构 求出100班同学的平均分 安装第三方库 因为这里的表结构是.xlsx文件,需要使用openpyxl库 如果是.xls格式文件,需要使用xlrd库 pip install openpyxl /…

构建 LLM (大型语言模型)应用程序——从入门到精通(第七部分:开源 RAG)

通过检索增强生成 (RAG) 应用程序的视角学习大型语言模型 (LLM)。 本系列博文 简介数据准备句子转换器矢量数据库搜索与检索大语言模型开源 RAG&#xff08;本帖&#xff09;评估服务LLM高级 RAG 1. 简介 我们之前的博客文章广泛探讨了大型语言模型 (LLM)&#xff0c;涵盖了其…

2024健康大数据与智能医疗(ICHIH 2024)

大会官网&#xff1a;www.ic-ichih.net 大会时间&#xff1a;2024年12月13-15日 大会地点&#xff1a;中国珠海 收录检索&#xff1a;IEEE Xplore&#xff0c;EI Compendex&#xff0c;Scopus

从0开始学PHP面向对象内容之常用设计模式(适配器,桥接,装饰器)

二&#xff0c;结构型设计模式 上两期咱们讲了创建型设计模式&#xff0c;都有 单例模式&#xff0c;工厂模式&#xff0c;抽象工厂模式&#xff0c;建造者模式&#xff0c;原型模式五个设计模式。 这期咱们讲结构型设计模式 1、适配器模式&#xff08;Adapter&#xff09; …

原生微信小程序画表格

wxml部分&#xff1a; <view class"table__scroll__view"><view class"table__header"><view class"table__header__item" wx:for"{{TableHeadtitle}}" wx:key"index">{{item.title}}</view></…

TDengine 签约深圳综合粒子,赋能粒子研究新突破

在高能物理和粒子研究领域&#xff0c;实验装置的不断升级伴随着海量数据的产生与处理。尤其是随着大湾区综合性国家科学中心的建设步伐加快&#xff0c;深圳综合粒子设施研究院&#xff08;以下简称“研究院”&#xff09;作为承载“双区驱动”战略的重要科研机构&#xff0c;…

SpringMVC——SSM整合

SSM整合 创建工程 在pom.xml中导入坐标 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_…

jenkins 2.346.1最后一个支持java8的版本搭建

1.jenkins下载 下载地址&#xff1a;Index of /war-stable/2.346.1 2.部署 创建目标文件夹&#xff0c;移动到指定位置 创建一个启动脚本&#xff0c;deploy.sh #!/bin/bash set -eDATE$(date %Y%m%d%H%M) # 基础路径 BASE_PATH/opt/projects/jenkins # 服务名称。同时约定部…

Apache-maven在Windows中的安装配置及Eclipse中的使用

Apache Maven 是一个自动化项目管理工具&#xff0c;用于构建&#xff0c;报告和文档的项目管理工具。以下是在不同操作系统上安装和配置 Maven 的基本步骤&#xff1a; 安装 Maven 下载 Maven: apache-maven-3.9.9下载地址&#xff0c;也可访问 Apache Maven 官方网站 下载最…

【MySQL】MySQL从入门到放弃

文章目录 声明MYSQL一,架构1.1.网络连接层数据库连接池 1.2.系统服务层1.2.1.SQL接口1.2.2.存储过程1.2.3.触发器1.2.4.解析器1.2.5.优化器1.2.6.缓存,缓冲 1.3.存储引擎层1.4.文件系统层1.4.1.日志模块1.4.2.数据模块 二,SQL 执行2.1.执行流程2.2.刷盘2.3.返回 三.库表设计3.1…

Docker 实战:搭建本地 Registry 私有镜像仓库及批量导入脚本

前言&#xff1a;在我之前的博客中&#xff0c;我分享了 Harbor 仓库搭建的详细操作步骤。然而&#xff0c;在实际的生产环境中&#xff0c;并非每个 Docker 环境都需要部署一个规模庞大的 Harbor 仓库。有时&#xff0c;一个轻量级的本地 Registry 私有镜像仓库会更为便捷。本…

faiss库中ivf-sq(ScalarQuantizer,标量量化)代码解读-5

训练过程 通过gdb调试得到这个ivfsq的训练过程&#xff0c;我尝试对这个内容具体训练过程进行解析&#xff0c;对每个调用栈里面的逻辑和代码进行解读。 步骤函数名称调用位置说明1faiss::IndexIVF::train/faiss/IndexIVF.cpp:1143开始训练&#xff0c;判断是否需要训练第一级…

【redis 】string类型详解

string类型详解 一、string类型的概念二、string类型的常用指令2.1 SET2.2 GET2.3 MSET2.4 MGET2.5 SETNX2.6 INCR2.7 INCRBY2.8 DECR2.9 DECRBY2.10 INCRBYFLOAT2.11 APPEND2.12 GETRANGE2.13 SETRANGE2.14 STRLEN 三、string类型的命令小结四、string类型的内部编码五、strin…

R-Meta分析

原文&#xff1a;R-Meta分析https://mp.weixin.qq.com/s/9ziVzSNRsgUbV9hTtXz5_g?token340211611&langzh_CN 一&#xff1a;AIMeta分析检索 1、AI大模型助力Meta分析的选题与文献检索 1)什么是Meta分析 2)Meta分析的选题策略 3)精确检索策略&#xff0c;如何检索全、检索…

如何在Spring项目中连接redis客户端并使用redis

如何连接redis客户端 我们知道我们在自己的云服务中下载好的redis的端口号呢&#xff0c;是6379&#xff0c;在云服务器中是受到防火墙保护的。但是我们可以通过ssh的隧道来映射到我们的redis客户端。 点击自己云服务器的属性&#xff0c;在这里面添加。 如图&#xff1a; 上…

微信小游戏/抖音小游戏SDK接入踩坑记录

文章目录 前言问题记录1、用是否存在 wx 这个 API 来判断是微小平台还是抖小平台不生效2、微小支付的参数如何获取?3、iOS 平台不支持虚拟支付怎么办?微小 iOS 端支付时序图:抖小 iOS 端支付:4、展示广告时多次回调 onClose5、在使用单例时 this 引起的 bug6、使用 fetch 或…

wkhtmltopdf的安装与使用

本文来记录下wkhtmltopdf的安装与使用 文章目录 概述下载路径安装配置wkhtmltopdf 参数详解代码实现本文小结 概述 将html转为pdf的组件有很多&#xff0c;但是还没有哪一款能达到这个效果&#xff0c;其只要原因是wkhtmltopdf使用webkit网页渲染引擎开发的用来将 html转成 pdf…