当前位置: 首页 > ai >正文

排序算法-快速排序

 描述:

  • 基准值选择:选取数组的最后一个元素 arr[high] 作为基准值 p
  • 初始化索引i 初始化为 low - 1,其作用是指向比基准值小的最后一个元素的索引。
  • 遍历数组:借助 for 循环从 low 到 high - 1 遍历数组。若当前元素 arr[j] 小于等于基准值 p,就把 i 加 1,并且调用 change 函数将 arr[i] 和 arr[j] 交换,以此把小于等于基准值的元素移到数组左边。
  • 更新基准值位置:遍历结束后,把基准值 arr[high] 和 arr[i + 1] 交换,让基准值处于正确位置。
  • 返回基准值索引:返回基准值的最终位置 i + 1
  • 递归终止条件:当 low 小于 high 时,意味着子数组中至少有两个元素,需要进行排序。
  • 分区操作:调用 paiXu 函数对数组进行分区,得到基准值的索引 pi
  • 递归排序:对基准值左边的子数组 arr[low...pi - 1] 和右边的子数组 arr[pi + 1...high] 分别递归调用 quickSort 函数进行排序。
#include <stdio.h>
//实现值的互换
void change(int *a, int *b)
{int temp = *a;*a = *b;*b = temp;
}//实现分区函数
//将数组划分为两个部分
int paiXu(int arr[], int low, int high)
{int p = arr[high];//这里选择最后一共元素作为基准int i = low - 1;//指向比基准值小的最后一共元素的索引for (int j = low; j < high; j++){if (arr[j] <= p)//如果当前的元素小于基准值{i++;//将小于基准值的索引++change(&arr[i], &arr[j]);//将当前元素交换到左边}}change(&arr[i + 1], &arr[high]);//更新基准元素的位置return (i + 1);//返回基准值的位置
}void quickSort(int arr[], int low, int high)
{if(low < high){//分区得到基准值的索引int pi = paiXu(arr, low, high);quickSort(arr, low, pi - 1);//对基准值的左边进行排序quickSort(arr, pi + 1, high);//对基准值的右边进行排序}
}int main(int argc, char const *argv[])
{int arr[] = {6,9,1,7,3,2,5,8,4};int n = sizeof(arr)/sizeof(arr[0]);quickSort(arr, 0, n);for(int i = 0; i < n ; i++){printf("%d  ",arr[i]);}printf("\n");return 0;
}

运行结果:

http://www.xdnf.cn/news/578.html

相关文章:

  • 【数据结构 · 初阶】- 带环链表
  • Spring Boot 集成Poi-tl实现动态Word文档生成
  • pnpm确认全局下载安装了还是显示cnpm不是内部或外部命令,也不是可运行的程序
  • Windows 中使用 `netstat` 命令查看端口占用
  • shell 正则表达式与文本处理器
  • C语言之高校学生信息快速查询系统的实现
  • mysql——基础知识
  • 百级Function架构集成DeepSeek实践:Go语言超大规模AI工具系统设计
  • 深入解析主流数据库体系架构:从关系型到云原生
  • LeetCode第158题_用Read4读取N个字符 II
  • HTML 如何改变字体颜色?深入解析与实践指南
  • 大数据学习栈记——MapReduce技术
  • 在 Anaconda 上安装多版本 Python 解释器并在 PyCharm 中配置
  • Pandas的应用
  • OpenCV 找出两个图像之间的差异 cv2.absdiff
  • 大数据开发知识1:数据仓库
  • KWDB MCP Server:解锁 LLM 与数据库的无缝协作
  • python之计算平面曲线离散点的曲率
  • Vector的学习
  • 第五章 SQLite数据库:5、SQLite 进阶用法:ALTER 命令、TRUNCATE 操作、视图创建、事务控制和子查询的操作
  • 一文总结通信电路中LC谐振回路中各公式以及对深入解读品质因数Q
  • Retinex系列图像/视频增强算法介绍
  • 损失函数总结
  • OpenLayers:视图变换的方法
  • 【AI论文】ColorBench:视觉语言模型能否看到并理解多彩的世界?一个全面的色彩感知、推理和鲁棒性基准测试
  • 各种诈骗、骚扰电话
  • linux网络管理
  • 【单倍型理解及计算系列之二】单倍型基本概念以及其与遗传定位中Bin的定义区别
  • SOA 核心三要素:服务、构件与对象的深度解析
  • Linux 系统盘制作 | 引导加载器(GRUB 为例)| mount