冒泡排序(Bubble Sort)

冒泡排序通过重复遍历列表,比较相邻元素并交换位置,将较大元素逐渐“冒泡”到末尾。
时间复杂度:平均和最坏情况为 $O(n^2)$,最好情况(已排序)为 $O(n)$。
代码实现

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

选择排序(Selection Sort)

选择排序每次遍历未排序部分,找到最小元素并交换到已排序部分的末尾。
时间复杂度:始终为 $O(n^2)$。
代码实现

def selection_sort(arr):
    n = len(arr)
    for i in range(n):
        min_idx = i
        for j in range(i+1, n):
            if arr[j] < arr[min_idx]:
                min_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
    return arr

插入排序(Insertion Sort)

插入排序将未排序元素逐个插入到已排序部分的正确位置,适合小规模或部分有序数据。
时间复杂度:平均和最坏为 $O(n^2)$,最好为 $O(n)$。
代码实现

def insertion_sort(arr):
    n = len(arr)
    for i in range(1, n):
        key = arr[i]
        j = i - 1
        while j >= 0 and key < arr[j]:
            arr[j+1] = arr[j]
            j -= 1
        arr[j+1] = key
    return arr

总结

  • 冒泡排序:简单但效率低,适合教学或小数据集。
  • 选择排序:交换次数少,但不稳定。
  • 插入排序:对部分有序数据高效,常作为高级算法(如快速排序)的子过程。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐