Bubbl排序算法 Python 使用列表示例

⚡ 智能摘要

Bubble Sort 通过反复比较相邻值并交换,按升序排列列表项。ping 当左侧元素较大时,则排序。这种简单的比较排序适用于小型或接近有序的数据集,并且能够有效地教授核心排序逻辑。

  • 🔁 核心机制: Bubbl排序算法会比较每一对相邻元素并交换它们,每次遍历后,都会将最大的未排序值推到其最终位置。
  • ⚙️ 优化版本: 标志变量会检测一次扫描是否不进行任何交换,从而提前结束循环,以便对已排序的列表进行一次扫描即可完成。
  • 🐍 Python 实施: 两个嵌套循环加上一个临时变量对列表进行排序,并且演练将每一行映射到其确切的行为。
  • 📊 复杂性概况: 时间复杂度在最坏和平均情况下为 O(n²),最佳情况下为 Ω(n),空间需求为常数 O(1)。
  • 🎯 最适合: Bubble sort 在教学和处理近乎有序的列表方面表现出色,但与高级算法相比,在大数据集上的表现较差。

Bubbl排序算法

什么是 Bubbl排序?

Bubbl电子排序 是一种排序算法,它通过比较两个相邻的值来对列表项进行升序排序。如果第一个值大于第二个值,则第一个值移到第二个值的位置,第二个值移到第一个值的位置。如果第一个值小于第二个值,则不进行交换。ping 已经完成了。

重复此过程,直到列表中的所有值都已比较并交换(如有必要)。每次迭代通常称为一次传递。冒泡排序中的传递次数等于列表中元素的数量减一。

在本 Bubbl分类 Python 教程 您将了解它所解决的问题、其优化形式、分步可视化演示以及工作原理。 Python 程序及其性能特点。

实施 Bubbl排序算法

我们将把实现过程分解为三个(3)步骤,即问题、解决方案和我们可以用来为任何语言编写代码的算法。

该问题

给定一个随机排列的物品清单,我们希望将这些物品按顺序排列。

请考虑以下列表:

[21, 6, 9, 33, 3]

解决方案

遍历列表,比较两个相邻元素并交换它们。ping 如果第一个值高于第二个值,则它们相等。

结果应该如下:

[3, 6, 9, 21, 33]

算法

冒泡排序算法的工作原理如下:

步骤1) 获取元素总数。获取给定列表中的项目总数。

步骤2) 确定需要执行的外层传递次数(n – 1)。其长度为列表减一。

步骤3) 对外部遍历 1 执行 (n – 1) 次内部遍历。获取第一个元素的值并将其与第二个值进行比较。如果第二个值小于第一个值,则交换它们的位置。

步骤4) 重复步骤 3 的操作,直到到达最外层(n – 1)。获取列表中的下一个元素,然后重复步骤 3 中执行的过程,直到所有值都按正确的升序排列。

步骤5) 所有遍历完成后返回结果。返回排序后的列表。

步骤6) 优化算法。

如果列表或相邻值已排序,则避免不必要的内部传递。例如,如果提供的列表已包含按升序排序的元素,那么我们可以提前中断循环。

优化 Bubbl排序算法

默认情况下,冒泡排序的算法 Python 比较列表中的所有项目,无论列表是否已排序。如果给定的列表已经排序,则比较所有值会浪费时间和资源。

优化冒泡排序可以帮助我们避免不必要的迭代,节省时间和资源。

例如,如果第一项和第二项已经排序,则无需迭代其余值。迭代终止,并启动下一个迭代,直到过程完成,如下所示 Bubble 排序示例。

优化过程按以下步骤进行:

步骤1) 创建一个标志变量,用于监控是否有任何交换ping 发生在内循环中。

步骤2) 如果数值位置互换,则继续进行下一次迭代。

步骤3) 如果这些值没有交换位置,则终止内层循环,并继续执行外层循环。

优化的冒泡排序更有效率,因为它只执行必要的步骤并跳过不需要的步骤。

视觉表现

给定一个包含五个元素的列表,下图说明了冒泡排序在排序时如何遍历这些值。

下图显示的是未排序的列表:

Bubbl对未排序列表进行排序

第一次迭代

步骤1)

Bubble 排序比较 21 和 6

比较值 21 和 6,检查哪一个大于另一个。

Bubble Sort 交换ping 21 6和

21 大于 6,所以 21 占据 6 的位置,而 6 占据 21 的位置。

Bubble 交换后对修改后的列表进行排序

我们修改后的列表现在看起来像上面的列表。

步骤2)

Bubble 排序比较 21 和 9

将值 21 和 9 进行比较。

Bubble Sort 交换ping 21 9和

21 大于 9,所以我们交换 21 和 9 的位置。

Bubbl交换后对新列表进行排序

新名单如上所示。

步骤3)

Bubble 排序比较 21 和 33

比较值 21 和 33,以找出较大者。

Bubble 排序 33 大于 21,不交换

数值 33 大于 21,因此无需交换。ping 发生。

步骤4)

Bubble 排序比较 33 和 3

比较值 33 和 3,以找出较大者。

Bubble Sort 交换ping 33 3和

值 33 大于 3,因此我们交换它们的位置。

Bubble 第一次迭代后对已排序列表进行排序

第一次迭代结束后的排序列表与上面的列表类似。

第二次迭代

第二次迭代后的新列表如下:

Bubble 第二次迭代后对列表进行排序

第三次迭代

第三次迭代后的新列表如下:

Bubble 第三次迭代后对列表进行排序

第四次迭代

第四次迭代后的新列表如下:

Bubble 在第四次迭代后对完全排序列表进行排序

Python 例子

下面的代码展示了如何实现 Bubbl排序算法 Python.

def bubbleSort(theSeq):
    n = len(theSeq)

    for i in range(n - 1):
        flag = 0

        for j in range(n - 1):
            if theSeq[j] > theSeq[j + 1]:
                tmp = theSeq[j]
                theSeq[j] = theSeq[j + 1]
                theSeq[j + 1] = tmp
                flag = 1

        if flag == 0:
            break

    return theSeq

el = [21, 6, 9, 33, 3]
result = bubbleSort(el)
print(result)

在以下代码中执行上述冒泡排序程序 Python 产生以下结果:

[3, 6, 9, 21, 33]

Code 说明

对于 Python Bubble排序程序代码如下:

Bubbl电子排序 Python 代码说明

这里,

  1. 定义一个函数bubbleSort,接受一个参数theSeq。代码不输出任何内容。
  2. 获取数组的长度并将该值赋给变量 n。该代码不输出任何内容。
  3. 启动一个 for 循环,该循环会执行冒泡排序算法 (n – 1) 次。这是外层循环。代码不会输出任何内容。
  4. 定义一个标志变量,用于判断是否发生了交换操作。这样做是为了优化性能。代码本身不会输出任何内容。
  5. 启动内循环,比较列表中从第一个到最后一个的所有值。代码不输出任何内容。
  6. 使用 if 语句检查左侧的值是否大于右侧的值。代码不输出任何内容。
  7. 如果条件为真,则将 theSeq[j] 的值赋给一个临时变量 tmp。该代码不输出任何内容。
  8. 将 theSeq[j + 1] 的值赋给 theSeq[j] 的位置。这段代码没有输出任何内容。
  9. 变量 tmp 的值被赋给 theSeq[j + 1] 处。这段代码没有输出任何内容。
  10. 标志变量被赋值为 1,表示发生了交换操作。代码不会输出任何内容。
  11. 使用 if 语句检查变量 flag 的值是否为 0。该代码不输出任何内容。
  12. 如果值为 0,则我们调用 break 语句退出内层循环。
  13. 返回排序后的 theSeq 的值。代码输出排序后的列表。
  14. 定义一个包含随机数列表的变量 el。代码不输出任何内容。
  15. 将函数bubbleSort的值赋给变量result。
  16. 打印变量结果的值。

Bubble 排序优势

以下是冒泡排序算法的一些优点:

  • 很容易理解。
  • 当列表已经排序或几乎排序完毕时,它的表现非常出色。
  • 它不需要大量内存。
  • 编写该算法的代码很容易。
  • 与其他排序算法相比,其空间要求极小。

Bubbl缺点

以下是冒泡排序算法的一些缺点:

  • 对大型列表进行排序时,它的性能不佳。它耗费太多时间和资源。
  • 它主要用于学术目的,而不是实际应用。
  • 对列表进行排序所需的步骤数为 n2.

复杂性分析 Bubbl电子排序

复杂性分为三种类型:

1)排序复杂度

排序复杂度用于表示对列表进行排序所需的执行时间和空间。冒泡排序需要 (n – 1) 次迭代才能对列表进行排序,其中 n 是列表中元素的总数。

2)时间复杂度

冒泡排序的时间复杂度为O(n2).

时间复杂度可以分为:

  • 最糟糕的情况 – 这是提供的列表按降序排列的地方。该算法执行的最大执行次数表示为 [Big-O] O(n2).
  • 最好的情况 – 当提供的列表已经排序时,就会发生这种情况。该算法执行最少的执行次数,表示为 [大Ω] Ω(n)。
  • 平均情况 – 当列表顺序随机时,就会发生这种情况。平均复杂度表示为 [Big-theta] ⊝(n2).

3)空间复杂度

空间复杂度衡量的是排序列表所需的额外空间量。冒泡排序只需要一个(1)额外空间来存储用于交换的时间变量。ping 因此,它的空间复杂度为 O(1)。

常见问题

Bubbl冒泡排序很少在生产级人工智能系统中运行,但它有助于教授数据准备背后的排序逻辑。机器学习流程使用更快的算法对特征、分数和预测结果进行排序,而冒泡排序则能帮助初学者理解比较和交换的概念。

是的。人工智能助手可以编写冒泡排序程序。 Python, Java 或 C++ 此外,他们还添加了优化标志,可以在列表已排序时提前停止。当数据集规模增大时,他们还可以推荐更快的算法。

它之所以被称为冒泡排序,是因为每次遍历时,较大的值会逐渐“冒泡”到列表的末尾,就像气泡上升到水面一样,而较小的值则会沉到列表的开头。

Bubble 排序的运行时间为 O(n²),比 O(n log n) 的快速排序和归并排序慢得多。 Bubble 排序适用于小型或教学示例,而快速排序和归并排序可以高效地处理大型真实世界数据集。

总结一下这篇文章: