Python利用快速排序思想查找数组第k大元素

阿麦
阿麦
发布时间:2026-10-12| 2人浏览过
原创

本文介绍一种基于快速排序Partition思想的Python算法,用于高效查找数组中任意第k大的数字。该方法通过递归缩小搜索范围,避免了对整个数组进行完整排序,从而在平均情况下达到O(n)的时间复杂度。文中提供了完整的代码示例及运行结果分析,适合需要处理大规模数据排序或统计场景的开发者参考。

本文分享一个使用Python编写的算法示例,旨在解决从数组中查找任意第k大数字的问题。该方案可供读者参考学习。

算法核心模仿了快速排序中的Partition过程。具体逻辑为:当分区点索引high等于low且小于k时,说明目标值位于后半部分,需在后半段继续搜索;当high等于low且大于k时,说明目标值位于前半部分,需在前半段继续搜索。与标准快排不同,此方法每次递归仅处理包含目标值的那一半区间,从而减少了不必要的排序操作。

def partitionOfK(numbers, start, end, k):
  if k < 0 or numbers == [] or start < 0 or end >= len(numbers) or k > end:
    return None
  low = start
  high = end
  key = numbers[start]
  while low < high:
    while low < high and numbers[high] >= key:
      high -= 1
    numbers[low] = numbers[high]
    while low < high and numbers[low] <= key:
      low += 1
    numbers[high] = numbers[low]
  numbers[low] = key
  if low < k:
    return partitionOfK(numbers, start + 1, end, k)
  elif low > k:
    return partitionOfK(numbers, start, end - 1, k)
  else:
    return numbers[low]
numbers = [3,5,6,7,2,-1,9,3]
print(sorted(numbers))
print(partitionOfK(numbers, 0, len(numbers) - 1, 5))

程序执行后,输出结果为数组中第五大的数值。

[-1, 2, 3, 3, 5, 6, 7, 9] 6

此外,推荐一款用于演示排序过程的在线工具,供读者辅助理解:

在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具: http://tools.jb51.net/aideddesign/paixu_ys

如需了解更多Python相关知识,建议查阅本站系列教程,包括《Python数据结构与算法教程》、《Python列表(list)操作技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》以及《Python入门与进阶经典教程》。

希望上述内容能对各位的Python编程实践提供有益帮助。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。