返回

排序算法剖析:冒泡、选择和插入排序的异同

前端

三大排序算法简介

在计算机科学中,排序算法用于将一组数据元素按照特定顺序排列。三种最基本的排序算法分别是冒泡排序、选择排序和插入排序,它们各有优缺点,适用于不同的场景。

冒泡排序 通过不断交换相邻元素,将较大的元素逐渐“浮”到数组尾部。

选择排序 每次找到数组中最小(或最大)的元素,并将其与数组首部(或尾部)交换位置。

插入排序 每次将一个元素从无序部分插入到有序部分,保证有序部分始终有序。

算法比较

特征 冒泡排序 选择排序 插入排序
时间复杂度(平均) O(n^2) O(n^2) O(n^2)
时间复杂度(最好) O(n) O(n) O(n)
时间复杂度(最差) O(n^2) O(n^2) O(n^2)
空间复杂度 O(1) O(1) O(1)
稳定性 稳定 不稳定 稳定

稳定性 是指当两个相等的元素在输入数组中相邻时,它们在排序后的数组中也相邻。冒泡排序和插入排序是稳定的,而选择排序是不稳定的。

实例演示

排序数组 [5, 2, 8, 3, 1]

冒泡排序:

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

输出:[1, 2, 3, 5, 8]

选择排序:

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

输出:[1, 2, 3, 5, 8]

插入排序:

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

输出:[1, 2, 3, 5, 8]

总结

冒泡排序、选择排序和插入排序都是简单高效的排序算法,适用于不同规模和性质的数据集。对于小规模数据集,插入排序性能最佳,而对于大规模数据集,选择排序和冒泡排序则不太适合。实际应用中,根据数据规模、稳定性需求等因素选择最合适的算法至关重要。