快速排序:Python 中的速度之王,揭秘它的递归魔法与性能极限!

简介: 【7月更文挑战第12天】快速排序**是高效排序算法,基于分治策略。它选择基准值,将数组分成小于和大于基准的两部分,递归地对两部分排序。

在众多排序算法中,快速排序以其高效和出色的性能脱颖而出。在 Python 中,快速排序同样展现了其强大的威力。下面通过具体的案例来深入剖析快速排序的原理、递归魔法以及性能表现。

首先,让我们来了解快速排序的基本原理。快速排序采用了分治的策略,通过选择一个基准元素,将待排序的数组分为小于基准和大于基准的两个子数组,然后对这两个子数组分别进行快速排序,从而实现整个数组的排序。

以下是快速排序的 Python 代码实现:

def quick_sort(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(left) + middle + quick_sort(right)

为了更好地理解快速排序的工作过程,我们来看一个具体的案例。假设有一个未排序的数组 [12, 11, 13, 5, 6]

首先选择中间元素 13 作为基准。将数组分为小于 13[12, 11, 5, 6] 和大于 13 的空数组。

然后对小于基准的子数组 [12, 11, 5, 6] 再次进行快速排序,选择 6 作为基准,分为 [5][12, 11]

继续对更小的子数组进行排序,直到子数组的长度为 1 或 0 。

通过不断的递归调用和分区操作,最终数组被排序为 [5, 6, 11, 12, 13]

为了测试快速排序的性能,我们可以生成一个较大规模的随机数组,并与其他常见排序算法(如冒泡排序)进行比较。

import random
import time

# 生成随机数组
arr = [random.randint(1, 1000) for _ in range(10000)]

# 快速排序计时
start_time = time.time()
sorted_arr_quick = quick_sort(arr.copy())
quick_sort_time = time.time() - start_time

# 冒泡排序
def bubble_sort(arr):
    n = len(arr)

    for i in range(n):
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1] :
                arr[j], arr[j + 1] = arr[j + 1], arr[j]

# 冒泡排序计时
start_time = time.time()
sorted_arr_bubble = bubble_sort(arr.copy())
bubble_sort_time = time.time() - start_time

print(f"快速排序时间: {quick_sort_time} 秒")
print(f"冒泡排序时间: {bubble_sort_time} 秒")

通过实际测试可以发现,快速排序在处理大规模数据时,性能远远优于冒泡排序,充分展现了其作为速度之王的优势。

然而,快速排序也并非完美无缺。在某些特殊情况下,例如数组已经基本有序或者数据规模较小,快速排序的性能可能会受到影响。但在大多数实际应用中,特别是对于大规模数据的排序,快速排序的递归魔法和高效性使其成为首选的排序算法之一。

相关文章
|
29天前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
50 3
|
27天前
|
存储 搜索推荐 Python
用 Python 实现快速排序算法。
快速排序的平均时间复杂度为$O(nlogn)$,空间复杂度为$O(logn)$。它在大多数情况下表现良好,但在某些特殊情况下可能会退化为最坏情况,时间复杂度为$O(n^2)$。你可以根据实际需求对代码进行调整和修改,或者尝试使用其他优化策略来提高快速排序的性能
118 61
|
1月前
|
存储 大数据 Python
利用Python的高级语法优化代码可以显著提高代码的可读性、简洁性和性能
利用Python的高级语法优化代码可以显著提高代码的可读性、简洁性和性能
35 1
|
1月前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
53 2
|
1月前
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
本文介绍了 Python 中的快速排序算法,从基本原理、实现代码到优化方法进行了详细探讨。快速排序采用分治策略,通过选择基准元素将数组分为两部分,递归排序。文章还对比了快速排序与冒泡排序的性能,展示了优化前后快速排序的差异。通过这些分析,帮助读者理解快速排序的优势及优化的重要性,从而在实际应用中选择合适的排序算法和优化策略,提升程序性能。
43 1
|
1月前
|
调度 数据库 Python
掌握Python中的异步编程,提升I/O密集型任务的性能
掌握Python中的异步编程,提升I/O密集型任务的性能
45 0
|
2月前
|
测试技术 持续交付 Apache
性能怪兽来袭!Python+JMeter+Locust,让你的应用性能飙升🦖
【10月更文挑战第10天】随着互联网应用规模的不断扩大,性能测试变得至关重要。本文将探讨如何利用Python结合Apache JMeter和Locust,构建高效且可定制的性能测试框架。通过介绍JMeter和Locust的使用方法及Python的集成技巧,帮助应用在高负载下保持稳定运行。
76 2
|
2月前
|
机器学习/深度学习 数据挖掘 Serverless
手把手教你全面评估机器学习模型性能:从选择正确评价指标到使用Python与Scikit-learn进行实战演练的详细指南
【10月更文挑战第10天】评估机器学习模型性能是开发流程的关键,涉及准确性、可解释性、运行速度等多方面考量。不同任务(如分类、回归)采用不同评价指标,如准确率、F1分数、MSE等。示例代码展示了使用Scikit-learn库评估逻辑回归模型的过程,包括数据准备、模型训练、性能评估及交叉验证。
134 1
|
2月前
|
存储 数据处理 Python
深入解析Python中的生成器:效率与性能的双重提升
生成器不仅是Python中的一个高级特性,它们是构建高效、内存友好型应用程序的基石。本文将深入探讨生成器的内部机制,揭示它们如何通过惰性计算和迭代器协议提高数据处理的效率。
|
2月前
|
测试技术 持续交付 Apache
性能怪兽来袭!Python+JMeter+Locust,让你的应用性能飙升🦖
【10月更文挑战第2天】随着互联网应用规模的不断膨胀,性能测试变得至关重要。本文将介绍如何利用Python结合Apache JMeter和Locust构建高效且可定制的性能测试框架。Apache JMeter是一款广泛使用的开源负载测试工具,适合测试静态和动态资源;Locust则基于Python,通过编写简单的脚本模拟HTTP请求,更适合复杂的测试场景。
75 3