C语言实现快速排序算法(附带源代码)

快速排序

在区间中随机挑选一个元素作基准,将小于基准的元素放在基准之前,大于基准的元素放在基准之后,再分别对小数区与大数区进行排序。

动态效果过程演示:

快速排序(Quick Sort)是一种常用的排序算法,它采用分治策略,将一个数组分成两个子数组,然后递归地对这两个子数组进行排序。以下是用 C 语言实现快速排序的示例代码:

#include <stdio.h>

// 交换数组中两个元素的位置
void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

// 根据数组的最后一个元素将数组分成两部分,并返回分割点的索引
int partition(int arr[], int low, int high) {
    int pivot = arr[high]; // 选择最后一个元素作为基准点
    int i = low - 1; // 初始化 i 为较小元素的索引

    for (int j = low; j <= high - 1; j++) {
        // 如果当前元素小于或等于基准点,则交换 arr[i+1] 和 arr[j]
        if (arr[j] <= pivot) {
            i++;
            swap(&arr[i], &arr[j]);
        }
    }

    // 最后将基准点与 arr[i+1] 交换,使基准点左侧的元素都小于基准点,右侧的元素都大于基准点
    swap(&arr[i + 1], &arr[high]);
    return i + 1;
}

// 快速排序函数
void quickSort(int arr[], int low, int high) {
    if (low < high) {
        // 获取分割点的索引
        int pi = partition(arr, low, high);

        // 对分割点左右的子数组进行递归排序
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}

int main() {
    int arr[] = {64, 25, 12, 22, 11};
    int n = sizeof(arr) / sizeof(arr[0]);

    // 调用快速排序函数
    quickSort(arr, 0, n - 1);

    // 输出排序后的数组
    printf("排序后的数组: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }

    return 0;
}

在上述代码中,quickSort 函数实现了快速排序的核心逻辑,而 partition 函数用于根据基准点将数组划分为两个子数组。在 main 函数中,创建了一个整数数组,调用 quickSort 函数对数组进行排序,最后输出排序后的数组。

快速排序的平均时间复杂度是 O(n log n),其中 n 是数组的长度。它是一种原地排序算法,但不是稳定的。在实际应用中,快速排序通常对大型数据集表现较好。

希望你也学会了,更多编程源码请来二当家的素材网:https://www.erdangjiade.com

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

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

相关文章

Mac 也能玩文明6!下载安装详细教程

最近朋友给我分享了一个 Mac 玩文明6的方法&#xff0c;丝毫不卡顿&#xff0c;非常流畅&#xff0c;分享给大家 文明6是最新的文明系列游戏&#xff0c;和以往的文明游戏一样&#xff0c;玩家将从石器时代创建文明&#xff0c;然后迈向信息时代&#xff0c;最终通过军事、经济…

SQL 系列教程(二)

目录 SQL DELETE 语句 DELETE 语句 演示数据库 DELETE 实例 删除所有行 SQL TOP, LIMIT, ROWNUM 子句 TOP 子句 演示数据库 SQL TOP、LIMIT 和 ROWNUM 示例 SQL TOP PERCENT 实例 添加WHERE子句 SQL MIN() 和 MAX() 函数 MIN() 和 MAX() 函数 演示数据库 MIN() …

【服务器Midjourney】Midjourney网站0基础搭建

目录 🌺【前言】 🌺【准备】 🌺【宝塔搭建MJ】 🌼1. 给服务器添加端口 🌼2. 使用Xshell连接服务器 🌼3. 安装docker 🌼4. 安装Midjourney程序 🌼5. 绑定域名+申请SSL证书 🌼6. 更新网站

4D成像雷达「风再起」

编者按&#xff1a;4D成像雷达在过去几年已经得到汽车行业的认可&#xff0c;但后面的路怎么走&#xff0c;是否会一帆风顺&#xff0c;还受制于很多因素。 “去年第三季度&#xff0c;四家合作伙伴都进入了基于我们芯片组的4D雷达生产阶段&#xff0c;目前正处于与欧美和亚洲头…

太卷了!这个考试系统不愧是“卷王”!

大家好&#xff0c;我是 Java陈序员。 今天给大家推荐一款 Java 开源、功能强大、搭建简单的调查问卷系统和考试系统。 关注微信公众号&#xff1a;【Java陈序员】&#xff0c;获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。 项目介绍 SurveyKing —— 也叫“…

简化java代码:mapstruct + 策略模式

目录 目的 准备 注意 相同类型-属性名不同 实体类 映射 使用 验证-查看实现类 测试 不同类型(策略模式) 实体类 映射 工具类 使用&#xff1a;对象拷贝 验证-查看实现类 测试 使用&#xff1a;集合拷贝 测试 策略模式说明 准备-依赖 目的 简化 BeanUtils.…

JAVA 学习 面试(四)垃圾回收篇

Java中的每个对象都经历了创建、使用和最终被回收的过程。从对象实例化开始&#xff0c;它可能被程序的多个部分引用&#xff0c;直到最后一个引用消失&#xff0c;对象成为垃圾&#xff0c;等待回收。 JVM垃圾查找算法 &#xff08;1&#xff09;引用计数法&#xff1a;已淘…

开始读 Oracle PL/SQL Programming 第6版

最近觉得PL/SQL越来越重要&#xff0c;因为这本书早就在待读列表中&#xff0c;因此决定系统的学一下。 2024年1月24日晚开始读。 在亚马逊上的评价还不错&#xff1a; 本书的第一作者是Steven Feuerstein&#xff0c;是Oracle资深的Developer Advocate。 本书的示例代码可…

JS进阶-内置构造函数(二)

小提示&#xff1a;这些内置函数在开发使用的频率非常的频繁&#xff0c;建议认真看一下&#xff0c;并背一下 目录 知识回顾&#xff1a; • Object 三个常用静态方法&#xff08;静态方法就是只有构造函数Object可以调用的&#xff09; Object.keys Object.values Obj…

《动手学深度学习(PyTorch版)》笔记3.4

Chapter3 Linear Neural Networks 3.4 Softmax Regression 3.4.1 Classification Problems 一般的分类问题并不与类别之间的自然顺序有关&#xff0c;统计学家发明了一种表示分类数据的简单方法&#xff1a;独热编码&#xff08;one-hot encoding&#xff09;。独热编码是一…

docker里安装conda,并source本地已有的虚拟环境包

有的环境比较难配&#xff0c;在镜像里配置的版本总是与本地不同&#xff0c;导致程序起不来&#xff0c;今天就用个最基础的镜像&#xff0c;去配置anaconda&#xff0c;然后直接导入虚拟环境。 本次使用镜像&#xff1a;nvcr.io/nvidia/cuda:12.2.0-runtime-ubuntu20.04&…

Spring Boot 中的自动配置(autoconfigure)

文中部分图片来源为 动力节点-王鹤老师的Spring Boot3.0 视频讲解中。 Spring Boot 中的自动配置&#xff08;autoconfigure&#xff09; 一、自动配置的原理二、关键注解和类1.EnableAutoConfiguration 注解2.Import 注解3.AutoConfigurationImportSelector 类4.AutoConfigura…

JeecgBoot 3.6.1实现Modal对话框,以为审核数据为例

JeecgBoot 3.6.1实现Modal对话框 vue使用的是3.0版本 文章目录 JeecgBoot 3.6.1实现Modal对话框前言一、列表页面关键代码示例二、textAuditModal.vue代码示例三、test.api.ts总结 前言 在工作中&#xff0c;有一个需求&#xff0c;要求&#xff0c;在数据列表页&#xff0c;…

念念不忘智能编程,必有回响CodeArts Snap

开发者的碎碎念 之前在【我与ModelArts的故事】的文章里&#xff0c;分享过我学习新技术的经历&#xff0c;主要有&#xff1a; 自主学习&#xff0c;比如自学Python&#xff1b;借助华为云的产品边用边学。 在围着"编程学习"这座城池&#xff0c;外围来来回回转了…

AI部署开发指南:用vs2019编译OnnxRuntime-v1.16.2

前言 要详细了解一个系统的部署&#xff0c;对其源码进行调试可能是最好的办法。 Pytorch的部署几经改版&#xff0c;最大的特点依然是不稳定&#xff0c;或者使用libtorch这种稳定但优化力度不够的部署方案。 而稳定且通用的方案&#xff0c;目前仍然是export to onnx的办法…

HCIP:不同VLAN下实现网络互相通信

配置pc1 配置pc2 配置pc3 将sw1划分到vlan3 将sw3划分到vlan3 在sw1上进行缺省 将sw1上&#xff08;g0/0/1&#xff09;的untagged改成 1 3 则在pc1上ping pc2可通 在sw1上进行缺省 在sw3上&#xff08;e0/0/1&#xff09;打标记 则在pc1上ping pc3可通&#xff08;实现互通&am…

python08-Python的数字类型之复数类型

复数是一个数学上的概念&#xff0c;这节不懂的可以绕过&#xff0c;实际场景很少用到 Python甚至可以支持复数&#xff0c;复数的虚部用j或者J来表示 如果需要对复数进行计算&#xff0c;可以导入Python的cmath模块&#xff08;c代表complex&#xff09;&#xff0c;如下面的…

DC电源模块的未来发展趋势

BOSHIDA DC电源模块的未来发展趋势 未来DC电源模块的发展趋势可以预测如下&#xff1a; 1. 高效能&#xff1a;随着绿色能源的需求增长&#xff0c;DC电源模块将更加注重高效能的设计&#xff0c;以减少能源消耗&#xff0c;并提高整体系统的能源利用率。 2. 高稳定性&#…

对 MODNet 网络结构直接剪枝的探索

文章目录 1 写在前面2 遇到问题3 解决方案4 探索过程4.1 方案一4.2 方案二4.3 方案三 5 疑惑与思考5.1 Q15.2 Q2 1 写在前面 在前面的文章中&#xff0c;笔者与小伙伴们分享了对 MODNet 主干网络部分以及其余分支分别剪枝的探索历程&#xff0c;即先分解、再处理、后融合的手法…

【JSON2WEB】03 go的模板包html/template的使用

Go text/template 是 Go 语言标准库中的一个模板引擎&#xff0c;用于生成文本输出。它使用类似于 HTML 的模板语言&#xff0c;可以将数据和模板结合起来&#xff0c;生成最终的文本输出。 Go html/template包实现了数据驱动的模板&#xff0c;用于生成可防止代码注入的安全的…