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

【数据结构取经之路】快速排序的非递归实现

概述

递归实现快速排序在一些场景下有栈溢出的风险,下面就谈谈如何用非递归的方法实现快速排序。

非递归实现的思想

递归实现与非递归实现快速排序的本质是一致的,效率并不会因为用了非递归实现而有所提升。递归实现快速排序的本质就在于通过递归,可以对不同长度的子数组进行快速排序,例如,第一次调用时处理的区间是[0,9],第二次调用时处理的区间是[0,4]……借助,也可以实现递归的本质功能——分割数组,对子数组进行快速排序。

非递归过程展开图

代码

 

void QuickSortNonR(int* a, int begin, int end)
{ST st;//创建栈STInit(&st);//初始化栈STPush(&st, end);//插入数据STPush(&st, begin);//插入数据while (!STEmpty(&st)){int left = STTop(&st);STPop(&st);int right = STTop(&st);STPop(&st);int keyi = PartSort(a, left, right);//判断区间是否为空或只有一个值if (keyi + 1 < right){STPush(&st, right);STPush(&st, keyi + 1);}//判断区间是否为空或只有一个值if (left < keyi - 1){STPush(&st, keyi - 1);STPush(&st, left);}}
}

 

http://www.lryc.cn/news/317239.html

相关文章:

  • 面试官: Spring Boot中spring-boot-starter-parent 有什么用
  • 手搭手RocketMQ发送消息
  • Mysql数据库的优点
  • 蓝桥杯练习系统(算法训练)ALGO-980 斐波那契串
  • AHU 数据库 实验五
  • 信号和槽1
  • 一个简单的微信小程序表单提交样式模板
  • SpringController返回值和异常自动包装
  • 生存预后不显著?最佳阈值来帮你!| 附完整代码 + 注释
  • kangle一键安装脚本
  • C#写入和调用方法
  • Qt的定时器QTimer
  • Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 4-4、线条平滑曲面(修改颜色)去除无效点
  • 某小厂java后端初面,记录一下
  • Unity制作马赛克效果
  • 【零基础学习04】嵌入式linux驱动中信号量功能基本实现
  • SQL中常见的DDL操作及示例,数据库操作及表操作
  • python 基础练习题
  • 前端请求到 SpringMVC 的处理流程
  • Redis(5.0)
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的木材表面缺陷检测系统(深度学习+Python代码+UI界面+训练数据集)
  • Rust 的 into_owned() 方法
  • stimulsoft report for js vue3使用
  • JavaScript yield关键字使用举例
  • 18. 查看帖子详情
  • 【算法刷题】Day30
  • docker容器镜像管理+compose容器编排(持续更新中)
  • 【Greenhills】MULTIIDE集成第三方的编辑器进行源文件编辑工作
  • 【Flutter】 search_page使用心得
  • 前端Vue列表组件 list组件:实现高效数据展示与交互