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

Python排序算法入门指南(从冒泡到归并,小白也能轻松掌握)

在编程学习过程中,Python排序算法是每个初学者必须掌握的基础知识。无论你是准备面试、参加竞赛,还是想提升代码效率,理解常见排序算法都至关重要。本文将用通俗易懂的语言,带你一步步了解几种经典排序方法,并附上清晰的代码示例。

Python排序算法入门指南(从冒泡到归并,小白也能轻松掌握) Python排序算法 冒泡排序 快速排序 归并排序 第1张

什么是排序算法?

排序算法就是将一组无序的数据按照特定规则(如从小到大或从大到小)重新排列的过程。在Python中,虽然内置了sorted()list.sort()等高效函数,但理解底层原理有助于你写出更高效的程序。

1. 冒泡排序(Bubble Sort)

冒泡排序是最简单的排序算法之一。它重复地遍历列表,比较相邻元素并交换顺序错误的元素,直到没有需要交换的为止。名字来源于较小的元素会像“气泡”一样慢慢“浮”到顶部。

def bubble_sort(arr):    n = len(arr)    # 外层循环控制排序轮数    for i in range(n):        # 标记本轮是否发生交换        swapped = False        # 内层循环进行相邻比较        for j in range(0, n - i - 1):            if arr[j] > arr[j + 1]:                arr[j], arr[j + 1] = arr[j + 1], arr[j]                swapped = True        # 如果没有交换,说明已经有序        if not swapped:            break    return arr# 示例使用numbers = [64, 34, 25, 12, 22, 11, 90]print("排序前:", numbers)print("排序后:", bubble_sort(numbers))

冒泡排序的时间复杂度为 O(n²),适合小规模数据排序。

2. 快速排序(Quick Sort)

快速排序是一种高效的分治算法。它选择一个“基准”元素,将数组分为两部分:小于基准的放在左边,大于基准的放在右边,然后递归地对左右子数组排序。

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)# 示例使用numbers = [64, 34, 25, 12, 22, 11, 90]print("排序前:", numbers)print("排序后:", quick_sort(numbers))

快速排序平均时间复杂度为 O(n log n),是实际应用中最常用的排序算法之一。

3. 归并排序(Merge Sort)

归并排序同样采用分治思想:将数组不断二分,直到每个子数组只有一个元素,然后逐步合并已排序的子数组。

def merge_sort(arr):    if len(arr) <= 1:        return arr        # 分割数组    mid = len(arr) // 2    left = merge_sort(arr[:mid])    right = merge_sort(arr[mid:])        # 合并两个已排序的数组    return merge(left, right)def merge(left, right):    result = []    i = j = 0        while i < len(left) and j < len(right):        if left[i] <= right[j]:            result.append(left[i])            i += 1        else:            result.append(right[j])            j += 1        # 添加剩余元素    result.extend(left[i:])    result.extend(right[j:])    return result# 示例使用numbers = [64, 34, 25, 12, 22, 11, 90]print("排序前:", numbers)print("排序后:", merge_sort(numbers))

归并排序的时间复杂度稳定为 O(n log n),但需要额外的存储空间。

总结与建议

通过本教程,你已经了解了三种核心的Python排序算法:简单直观的冒泡排序、高效实用的快速排序以及稳定可靠的归并排序。对于初学者,建议先掌握冒泡排序理解基本逻辑,再进阶学习快速排序和归并排序。

在实际开发中,除非有特殊需求,否则优先使用Python内置的排序函数,因为它们经过高度优化,性能远超手写算法。但理解这些算法原理,将极大提升你的编程思维和问题解决能力!