专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

面试题系列常用排序算法之:(一)“冒泡排序”

ins518 2025-03-06 16:05:16 技术文章 224 ℃ 0 评论

#头条创作挑战赛#

冒泡排序是一种简单的比较排序算法,它通过多次比较相邻元素的大小,并根据比较结果交换它们的位置,从而将较大(或较小)的元素“冒泡”到数组的一端。本文将介绍冒泡排序的基本原理、实现方式、时间复杂度和适用场景,并提供一个使用 JavaScript 进行测试的示例。

冒泡排序的基本原理

冒泡排序的基本原理是通过多次比较相邻元素的大小,并根据比较结果交换它们的位置,从而将较大(或较小)的元素“冒泡”到数组的一端。具体步骤如下:

  1. 从数组的第一个元素开始,比较它与其相邻的元素的大小。
  2. 如果前一个元素大于(或小于)后一个元素,就交换它们的位置。
  3. 继续比较下一个相邻的元素,直到数组的末尾。
  4. 这样一次遍历之后,数组中最大(或最小)的元素就“冒泡”到了数组的末尾。
  5. 重复以上步骤,但不包括已经排序好的末尾部分,直到整个数组排序完成。

冒泡排序是一种稳定的排序算法,因为相等元素的相对位置在排序后不会发生变化。

冒泡排序的实现方式

冒泡排序可以使用两层嵌套循环来实现。外层循环控制排序的轮数,内层循环用于比较相邻元素并进行交换。具体实现如下:

function bubbleSort(arr) {
  const n = arr.length;
  for (let i = 0; i < n - 1; i++) { // 外层循环控制排序的轮数
    for (let j = 0; j < n - 1 - i j if arrj> arr[j + 1]) {
        // 交换相邻元素的位置
        const temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
  return arr;
}

冒泡排序的时间复杂度和空间复杂度

冒泡排序的时间复杂度为O(n^2),其中n是待排序数组的长度。这是因为冒泡排序需要比较n-1轮,并且每轮需要比较n-i次,其中i为当前轮数。每次比较需要花费O(1)的时间,所以总的时间复杂度为O(n^2)。

冒泡排序的空间复杂度为O(1),因为冒泡排序只需要在原数组上进行元素的交换操作,不需要额外的空间来存储数据。

冒泡排序的适用场景

冒泡排序是一种简单但效率较低的排序算法,通常适用于以下场景:

  1. 小规模数组排序:由于冒泡排序的时间复杂度较高,对于大规模的数组排序效率较低。但对于小规模的数组,冒泡排序可以考虑使用,因为其实现简单,代码易于理解。
  2. 教学和学习用途:冒泡排序是一种常见的排序算法,通常在教学和学习过程中作为入门级的排序算法来介绍和学习。通过实现和理解冒泡排序,可以帮助初学者掌握排序算法的基本原理和思想。
  3. 排序稳定性要求较高:冒泡排序是一种稳定的排序算法,即相等元素的相对位置在排序后不会发生变化。在某些情况下,对排序结果的稳定性要求较高的场景,可以考虑使用冒泡排序。

冒泡排序的示例测试

下面是使用 JavaScript 实现的冒泡排序的示例代码,并进行简单的测试:

// 冒泡排序
function bubbleSort(arr) {
  const n = arr.length;
  for (let i = 0; i < n - 1; i++) {
    for (let j = 0; j < n - 1 - i j if arrj> arr[j + 1]) {
        const temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
  return arr;
}

// 测试
const arr = [64, 34, 25, 12, 22, 11, 90];
console.log("原数组:", arr);
console.log("排序后:", bubbleSort(arr));

输出结果:

原数组: [64, 34, 25, 12, 22, 11, 90]
排序后: [11, 12, 22, 25, 34, 64, 90]

下一篇,我将更新常用排序算法之:(二)选择排序。

如果你有不同的见解,欢迎大家在评论区留言讨论。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表