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

软设之快速排序

快速排序是冒泡排序的改进算法

它采用的是分治法,基本思想是把原问题分解为若干规模更小但结构与原问题相似的子问题,通过递归解决这些子问题,然后将这些子问题的解组合成原问题的解。

它的步骤是

1.在待排序的n个记录中任取一个记录,以该记录的排序码为准,将所有记录都分成两组,第1组都小于该数,第2组都大于该数。

2.采用相同方法对左右两组分别进行排序,直到所有记录都排到相应位置。

以数组57,68,59,52为例

选择57作为基准数组

57和52比较,52小,57和52交换位置

52,68,59,57

选择68和57比较,57小,57和68交换位置

52,57,59,68。

由于元素数量小,已经完成排序了。同样初始顺序数组,需要操作的次数比冒泡排序少多了。

快速排序的基准元素:一般是第一个元素,也可以是中位数。

快速排序是一种不稳定的排序方法,平均和最优情况下时间复杂度是O(nlog(2)n)

最差的情况,此时数组基本有序,以第一个时间复杂度是O(n^2)。以中位数为基准情况,时间复杂度是O(nlog(2)n)

空间复杂度是O(1)

需要辅助空间存储左侧数据和右侧数据,空间复杂度为O(n)

需要记录所有基准元素时,空间复杂度为O(log(2)n)

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

相关文章:

  • 从零学算法2965
  • 【Mac版】Java生成二维码
  • ROS2自定义服务接口
  • linux /www/server/cron内log文件占用空间过大,/www/server/cron是什么内容,/www/server/cron是否可以删除
  • C++青少年简明教程:break语句、continue语句
  • MySQL实战行转列(或称为PIVOT)实战sales的表记录了不同产品在不同月份的销售情况,进行输出
  • 牛客NC164 最长上升子序列(二)【困难 贪心+二分 Java/Go/PHP/C++】
  • 电子烟开发【恒压、恒有效算法】
  • 基于Open3D的点云处理22-非阻塞可视化/动态可视化
  • C++面试题其一
  • CentOS7某天的samba服务搭建操作记录(还没成功)
  • Qt Demo:基于TCP协议的视频传输Demo
  • 内存管理【C++】
  • D3D 顶点格式学习
  • gmssl vs2010编译
  • 容器化部署gitlab、jenkins,jenkins应用示例
  • 基于STM32的轻量级Web服务器设计
  • 用r语言处理 Excel数据当中的缺失值方法
  • AWS 高防和阿里云高防深度对比
  • ctfshow web 月饼杯II
  • 「前端+鸿蒙」核心技术HTML5+CSS3(二)
  • unity接入live2d
  • 练习题-17
  • 乐高小人分类项目
  • 个人关于ChatGPT的用法及建议
  • 神经网络的工程基础(二)——随机梯度下降法|文末送书
  • 常见的几种编码方式
  • ubuntu移动硬盘重命名
  • VUE框架前置知识总结
  • 张宇1000题80%不会?别急,这个方法肯定有用!