跳到主要内容

冒泡排序

冒泡排序如何工作?​

  • 从左向右遍历, 相邻两元素逆序就交换;
  • 第 n-i 轮把未排序区间 [0, i] 的最大元素送到位置 i;
  • 重复 n-1 轮后整体有序;

冒泡排序如何实现?​

function bubbleSort(nums: number[]): void {
for (let i = nums.length - 1; i > 0; i--) {
for (let j = 0; j < i; j++) {
if (nums[j] > nums[j + 1]) {
[nums[j], nums[j + 1]] = [nums[j + 1], nums[j]];
}
}
}
}

冒泡排序的特性是什么?​

  • 时间复杂度: O(n^2), 该实现未做提前退出, 已有序输入仍为 O(n^2);
  • 空间复杂度: O(1);
  • 稳定性: 稳定排序, 只有严格逆序才交换;
  • 代价: 每轮都在交换元素, 交换开销高于插入排序的元素搬移;