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

createh53周前 (05-04)技术教程7

#头条创作挑战赛#

冒泡排序是一种简单的比较排序算法,它通过多次比较相邻元素的大小,并根据比较结果交换它们的位置,从而将较大(或较小)的元素“冒泡”到数组的一端。本文将介绍冒泡排序的基本原理、实现方式、时间复杂度和适用场景,并提供一个使用 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 (arr[j] > 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 (arr[j] > 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]

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

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

相关文章

C++ 初学阶段-冒泡法排序(c++冒泡排序模板)

C++ 初学阶段-冒泡法排序(c++冒泡排序模板)

#头条创作挑战赛#学程序重要的思维,冒泡法排序冒泡法排序,从第一个数值开始分别与后面的数值对比大小。大与就互换位置,直到换到最后一个数字。排序前数组:10,47,3,82,55,90,38,60,21...

冒泡、插入、选择排序(C语言)(c语言冒泡排序需要注意什么)

以下排序算法默认从小到大的升序排序。冒泡排序思路从数组的第一个数a[0]开始,向后遍历,每次比较a[i]和a[i+1]的值若a[i]大于a[i+1],就交换两个位置的数的值。重复上述1和2的操作至a[...

常用排序算法:冒泡排序,快速排序

在生活中,我们离不开排序。例如上体育课时,同学们会按照身高顺序进行排队;又如每一场考试后,老师会按照考试成绩排名次。在编程的世界中,应用到排序的场景也比比皆是。例如当开发一个学生 管理系统时,需要按照...

Python | 数据结构 - 冒泡排序和选择排序

排序算法比较排序算法平均时间复杂度最坏时间复杂度空间复杂度是否稳定冒泡排序O(n2)O(n2)O(1)是选择排序O(n2)O(n2)O(1)不是插入排序O(n2)O(n2)O(1)是希尔排序O(n1....

冒泡排序算法(冒泡排序算法代码)

冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,一次比较两个元素,并且如果它们的顺序错误就交换它们。重复地进行这个过程直到整个列表都是有序的。以下是用C语言实现冒泡排序算法的示例代码:#inc...