返回
排序算法剖析:冒泡、选择和插入排序的异同
前端
2024-01-04 17:49:05
三大排序算法简介
在计算机科学中,排序算法用于将一组数据元素按照特定顺序排列。三种最基本的排序算法分别是冒泡排序、选择排序和插入排序,它们各有优缺点,适用于不同的场景。
冒泡排序 通过不断交换相邻元素,将较大的元素逐渐“浮”到数组尾部。
选择排序 每次找到数组中最小(或最大)的元素,并将其与数组首部(或尾部)交换位置。
插入排序 每次将一个元素从无序部分插入到有序部分,保证有序部分始终有序。
算法比较
特征 | 冒泡排序 | 选择排序 | 插入排序 |
---|---|---|---|
时间复杂度(平均) | 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]
总结
冒泡排序、选择排序和插入排序都是简单高效的排序算法,适用于不同规模和性质的数据集。对于小规模数据集,插入排序性能最佳,而对于大规模数据集,选择排序和冒泡排序则不太适合。实际应用中,根据数据规模、稳定性需求等因素选择最合适的算法至关重要。