通过可视化动画深入理解冒泡排序的工作原理
冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
function bubbleSort(arr) {
let n = arr.length;
let comparisons = 0;
let swaps = 0;
// 外层循环控制遍历轮数
for (let i = 0; i < n - 1; i++) {
let swapped = false;
// 内层循环进行相邻元素比较
for (let j = 0; j < n - i - 1; j++) {
comparisons++;
// 如果前一个元素大于后一个元素,则交换
if (arr[j] > arr[j + 1]) {
// 交换元素
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
swapped = true;
swaps++;
}
}
// 如果这一轮没有发生交换,说明数组已经有序
if (!swapped) break;
}
return { arr, comparisons, swaps };
}
def bubble_sort(arr):
n = len(arr)
comparisons = 0
swaps = 0
# 外层循环控制遍历轮数
for i in range(n - 1):
swapped = False
# 内层循环进行相邻元素比较
for j in range(n - i - 1):
comparisons += 1
# 如果前一个元素大于后一个元素,则交换
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapped = True
swaps += 1
# 如果这一轮没有发生交换,说明数组已经有序
if not swapped:
break
return arr, comparisons, swaps
| 复杂度类型 | 最好情况 | 平均情况 | 最坏情况 |
|---|---|---|---|
| 时间复杂度 | O(n) | O(n²) | O(n²) |
| 空间复杂度 | O(1) | ||