news 2026/4/29 20:02:34

超简单JavaWeb开发环境搭建:3步搞定

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
超简单JavaWeb开发环境搭建:3步搞定

快速排序算法详解

快速排序是一种基于分治策略的高效排序算法,由Tony Hoare于1959年提出。其核心思想是通过递归地将数据分割成较小和较大的子序列来实现排序。算法平均时间复杂度为$O(n \log n)$,在最坏情况下为$O(n^2)$,但通过优化可避免最坏情况。

算法原理
  1. 选择基准:从数组中任选一个元素作为基准值(pivot)
  2. 分区操作:将数组分为三部分:
    • 小于基准值的元素
    • 等于基准值的元素
    • 大于基准值的元素
  3. 递归排序:对小于和大于基准值的子数组递归进行快速排序

分区操作的数学表达式可表示为: $$ \text{left} = { x \in \text{arr} \mid x < \text{pivot} } $$ $$ \text{right} = { x \in \text{arr} \mid x > \text{pivot} } $$

优化实现

基础版本需要额外存储空间,以下是原地排序的优化实现:

def partition(arr, low, high): """分区函数实现原地排序""" pivot = arr[high] # 选择最后一个元素作为基准 i = low - 1 # 小于基准的边界指针 for j in range(low, high): if arr[j] <= pivot: i += 1 arr[i], arr[j] = arr[j], arr[i] # 交换位置 arr[i+1], arr[high] = arr[high], arr[i+1] # 基准归位 return i + 1 def quick_sort_inplace(arr, low, high): """原地快速排序主函数""" if low < high: pi = partition(arr, low, high) # 获取基准位置 quick_sort_inplace(arr, low, pi-1) # 递归左子数组 quick_sort_inplace(arr, pi+1, high) # 递归右子数组 # 封装调用接口 def optimized_quick_sort(arr): quick_sort_inplace(arr, 0, len(arr)-1) return arr
时间复杂度分析
  • 最优情况:每次分区平衡时 $T(n) = 2T(n/2) + O(n)$,解得 $O(n \log n)$
  • 最坏情况:已排序数组且选择端点 $T(n) = T(n-1) + O(n)$,解得 $O(n^2)$
  • 空间复杂度:优化后为 $O(\log n)$(递归栈深度)
扩展应用
# 三路快速排序(处理重复元素) def quick_sort_3way(arr): if len(arr) <= 1: return arr pivot = arr[len(arr)//2] left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quick_sort_3way(left) + middle + quick_sort_3way(right) # 测试用例 test_array = [3, 6, 8, 10, 1, 2, 1] print("基础版本:", quick_sort(test_array.copy())) print("优化版本:", optimized_quick_sort(test_array.copy())) print("三路排序:", quick_sort_3way(test_array.copy()))
算法特性
  • 稳定性:基础版本不稳定,三路版本可保持稳定
  • 适用场景:大规模乱序数据,内存受限环境(优化版本)
  • 优化技巧
    • 随机选择基准避免最坏情况
    • 小数组切换为插入排序
    • 三数取中法选择基准

通过合理选择基准和优化实现,快速排序在实践中通常优于归并排序和堆排序,是多数编程语言标准库的默认排序实现。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 20:02:26

Claude Code 深度拆解:Agent 执行内核 3 — 从 API 调用到安全退出

Hi&#xff0c;大家好&#xff0c;欢迎来到维元码簿。 本文属于 《Claude Code 源码 Deep Dive》 系列&#xff0c;专注于 Agent 执行内核中的 API 调用、流式处理、工具执行、错误恢复与生命周期收尾 板块。如果你想了解整个系列&#xff0c;可以先看系列开篇 | Claude Code …

作者头像 李华
网站建设 2026/4/29 19:56:35

解锁电脑静音新境界:Fan Control让你的风扇变得聪明又安静

解锁电脑静音新境界&#xff1a;Fan Control让你的风扇变得聪明又安静 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendin…

作者头像 李华
网站建设 2026/4/29 19:56:33

3分钟从零开始:用AICoverGen制作专业级AI翻唱的完整指南

3分钟从零开始&#xff1a;用AICoverGen制作专业级AI翻唱的完整指南 【免费下载链接】AICoverGen A WebUI to create song covers with any RVC v2 trained AI voice from YouTube videos or audio files. 项目地址: https://gitcode.com/gh_mirrors/ai/AICoverGen 想让…

作者头像 李华
网站建设 2026/4/29 19:49:44

前端新范式:用 AI 提效开发,用 EE 保证迭代质量

1.概述 在人工智能快速发展的今天&#xff0c;AI不再仅仅是回答问题的聊天机器人&#xff0c;而是正在演变为能够主动完成复杂任务的智能代理。OpenAI的Codex CLI就是这一趋势的典型代表——一个跨平台的本地软件代理&#xff0c;能够在用户的机器上安全高效地生成高质量的软件…

作者头像 李华
网站建设 2026/4/29 19:49:17

吉时利Keilthley 2400 通用数字源表 高精度数字万用表

吉时利Keilthley 2400 通用数字源表 高精度数字万用表 Keithley 标准系列 2400 源测量单元 (SMU) 仪器提供四象限精密电压和电流源/负载&#xff0c;外加测量。每个 SMU 仪器均同时提供高度稳定的直流电源和一台真正的仪器级 6 位万用表。电源特性包括低噪声、高精度和回读。万…

作者头像 李华