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

sort快排

当然可以!让我们通过类似的详细步骤来解释 快速排序(Quick Sort) 的原理和实现,就像之前解释 a &= (a - 1) 的原理一样。

快速排序(Quick Sort)原理

快速排序是一种高效的排序算法,其核心思想是分而治之。它通过选择一个“基准值”(pivot),将数组分为两部分:

  1. 一部分包含所有小于基准值的元素;

  2. 另一部分包含所有大于基准值的元素。

然后,对这两部分分别递归地进行快速排序,最终整个数组变得有序。


详细步骤

1. 选择基准值(Pivot)

快速排序的第一步是选择一个基准值。基准值的选择有多种方法:

  • 选择数组的第一个元素;

  • 选择数组的最后一个元素;

  • 选择数组的中间元素;

  • 随机选择一个元素。

2. 分区操作(Partition)

分区操作是快速排序的核心。它的目标是将数组分为两部分:

  • 所有小于基准值的元素移到基准值的左边;

  • 所有大于基准值的元素移到基准值的右边。

分区操作完成后,基准值位于其最终位置。

3. 递归排序

对基准值左边和右边的子数组分别递归地执行快速排序,直到子数组的大小为1或0,此时整个数组变得有序。


分区操作的详细解释

假设我们选择数组的最后一个元素作为基准值。分区操作的步骤如下:

  1. 初始化指针

    • i:指向小于基准值的元素的最后一个位置(初始为 left - 1)。

    • j:遍历数组的指针(从 leftright - 1)。

    • pivot:基准值(arr[right])。

  2. 遍历数组

    • 从左到右遍历数组,比较每个元素与基准值。

    • 如果 arr[j] < pivot,则将 arr[j]arr[i + 1] 交换,并将 i 向右移动一位。

    • 如果 arr[j] >= pivot,则跳过。

  3. 交换基准值

    • 遍历完成后,将基准值与 arr[i + 1] 交换,此时基准值位于其最终位置。


示例

假设我们有一个数组 arr = [9, 7, 5, 11, 12, 2, 14, 3, 10, 6],选择最后一个元素 6 作为基准值。

分区操作:
  1. 初始化

    • i = -1j = 0pivot = 6

  2. 遍历数组

    • j = 0arr[j] = 99 > 6,跳过。

    • j = 1arr[j] = 77 > 6,跳过。

    • j = 2arr[j] = 55 < 6,交换 arr[i + 1]arr[j]i = 0,数组变为 [5, 7, 9, 11, 12, 2, 14, 3, 10, 6]

    • j = 3arr[j] = 1111 > 6,跳过。

    • j = 4arr[j] = 1212 > 6,跳过。

    • j = 5arr[j] = 22 < 6,交换 arr[i + 1]arr[j]i = 1,数组变为 [5, 2, 9, 11, 12, 7, 14, 3, 10, 6]

    • j = 6arr[j] = 1414 > 6

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

相关文章:

  • 用xml配置spring, bean标签有哪些属性?
  • 纪念日倒数日项目的实现-【纪念时刻-时光集】
  • 无人机不等同轴旋翼架构设计应用探究
  • 1-8 gitee码云的注册与使用
  • 嵌入式硬件篇---OpenMV的硬件流和软件流
  • Word 里面嵌入DeepSeek
  • 聊聊 IP 地址和端口号的区别
  • rust学习一、入门之搭建简单开发环境
  • 浅聊MQ之Kafka与RabbitMQ简用
  • 【原创】解决vue-element-plus-admin无法实现下拉框动态控制表单功能,动态显隐输入框
  • SpringBoot开发——初步了解SpringBoot
  • 双轴伺服电机驱动控制器AGV、AMR专用双伺服电机驱动控制器解决方案
  • 【VB语言】EXCEL中VB宏的应用
  • Ubuntu添加桌面快捷方式
  • 10G EPON光模块
  • Elasticsearch+Logstash+Kibana可视化集群部署
  • 基于CanMV IDE 开发软件对K210图像识别模块的开发
  • win11系统 Docker Desktop提示Docker Engine stopped解决全过程记录
  • 工作室如何实现一机一IP
  • WEB安全--SQL注入--二次注入
  • 构建现代微服务安全体系:Spring Security、JWT 与 Spring Cloud Gateway 实践
  • Spring Boot 动态数据源实操指南
  • HBase高级技巧:解锁更强大的数据处理能力
  • 【进阶】JVM篇
  • DeepSeek官方推荐的AI集成系统
  • 【动态规划篇】:当回文串遇上动态规划--如何用二维DP“折叠”字符串?
  • JENKINS(全面)
  • Promise详解大全:介绍、九个方法使用和区别、返回值详解
  • 尚硅谷爬虫note004
  • Debezium系列之:时区转换器,时间戳字段转换到指定时区