详解冒泡排序算法原理与使用方法

冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,每次比较相邻的两个元素,如果顺序不对则交换它们的位置。遍历数列的工作会重复地进行,每一轮会将最大的数排到最后,下一轮遍历时最后的数已经确定下来了,不需要再次比较。时间复杂度为 O(n^2),是一种效率较低的排序算法,但是它简单易懂,容易实现,所以在小规模数据的排序中仍然被广泛使用。

冒泡排序的使用方法如下:

  1. 首先定义一个数组,存储需要排序的数据。
int arr[] = {5, 3, 8, 4, 2};
  1. 对数组进行遍历,比较相邻的两个元素并交换它们。
for(int i = 0; i < arr.length - 1; i++){
    for(int j = 0; j < arr.length - 1 - i; j++){
        if(arr[j] > arr[j + 1]){
            int temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
        }
    }
}
  1. 遍历完成后,数组中的数据已经排好序了。

示例 1:

假设有一个需要排序的数组 arr[] = {5, 3, 8, 4, 2},冒泡排序的具体过程如下所示。

第一轮遍历时:
- 比较 5 和 3,由于 5 大于 3,所以交换它们的位置,此时数组变为 {3, 5, 8, 4, 2}。
- 比较 5 和 8,由于 5 小于 8,不需要交换位置。
- 比较 8 和 4,由于 8 大于 4,所以交换它们的位置,此时数组变为 {3, 5, 4, 8, 2}。
- 比较 8 和 2,由于 8 大于 2,所以交换它们的位置,此时数组变为 {3, 5, 4, 2, 8}。

第一轮遍历结束后,最大的数字 8 已经放在了数组的最后。

第二轮遍历时:
- 比较 3 和 5,由于 3 小于 5,不需要交换位置。
- 比较 5 和 4,由于 5 大于 4,所以交换它们的位置,此时数组变为 {3, 4, 5, 2, 8}。
- 比较 5 和 2,由于 5 大于 2,所以交换它们的位置,此时数组变为 {3, 4, 2, 5, 8}。

第二轮遍历结束后,第二大的数字 5 已经放在了数组的倒数第二个位置。

第三轮遍历时:
- 比较 3 和 4,由于 3 小于 4,不需要交换位置。
- 比较 4 和 2,由于 4 大于 2,所以交换它们的位置,此时数组变为 {3, 2, 4, 5, 8}。

第三轮遍历结束后,第三大的数字 4 已经放在了数组的倒数第三个位置。

第四轮遍历时:
- 比较 3 和 2,由于 3 大于 2,所以交换它们的位置,此时数组变为 {2, 3, 4, 5, 8}。

第四轮遍历结束后,第四大的数字 3 已经放在了数组的倒数第四个位置。

第五轮遍历时:
- 数组中只剩下一个数字了,不需要继续排序。

最终,数组变为 {2, 3, 4, 5, 8},排序完成。

示例 2:

假设有一个需要排序的数组 arr[] = {1, 1, 0, 0, 1, 0, 1, 1, 0},冒泡排序的具体过程如下所示。

第一轮遍历时:
- 比较 1 和 1,由于相等,不需要交换位置。
- 比较 1 和 0,由于 1 大于 0,所以交换它们的位置,此时数组变为 {1, 0, 1, 0, 1, 0, 1, 1, 0}。
- 比较 1 和 1,由于相等,不需要交换位置。
- 比较 1 和 0,由于 1 大于 0,所以交换它们的位置,此时数组变为 {1, 0, 1, 0, 1, 0, 1, 1, 0}。
- 比较 1 和 0,由于 1 大于 0,所以交换它们的位置,此时数组变为 {1, 0, 1, 0, 1, 0, 1, 1, 0}。
- 比较 0 和 1,由于 0 小于 1,不需要交换位置。
- 比较 1 和 1,由于相等,不需要交换位置。
- 比较 1 和 1,由于相等,不需要交换位置。

第一轮遍历结束后,最大的数字 1 已经放在了数组的最后。

第二轮遍历时:
- 比较 1 和 0,由于 1 大于 0,所以交换它们的位置,此时数组变为 {0, 1, 0, 1, 0, 1, 1, 0, 1}。
- 比较 1 和 0,由于 1 大于 0,所以交换它们的位置,此时数组变为 {0, 0, 1, 1, 0, 1, 1, 0, 1}。
- 比较 1 和 0,由于 1 大于 0,所以交换它们的位置,此时数组变为 {0, 0, 1, 0, 1, 1, 1, 0, 1}。
- 比较 1 和 1,由于相等,不需要交换位置。
- 比较 1 和 1,由于相等,不需要交换位置。

第二轮遍历结束后,第二大的数字 1 已经放在了数组的倒数第二个位置。

第三轮遍历时:
- 比较 0 和 1,由于 0 小于 1,不需要交换位置。
- 比较 1 和 0,由于 1 大于 0,所以交换它们的位置,此时数组变为 {0, 0, 0, 1, 1, 1, 1, 0, 1}。
- 比较 1 和 1,由于相等,不需要交换位置。

第三轮遍历结束后,第三大的数字 1 已经放在了数组的倒数第三个位置。

第四轮遍历时:
- 比较 0 和 0,由于相等,不需要交换位置。

第四轮遍历结束后,第四大的数字 0 已经放在了数组的倒数第四个位置。

第五轮遍历时:
- 比较 0 和 1,由于 0 小于 1,不需要交换位置。

第五轮遍历结束后,第五大的数字 0 已经放在了数组的倒数第五个位置。

第六轮遍历时:
- 比较 0 和 1,由于 0 小于 1,不需要交换位置。

第六轮遍历结束后,第六大的数字 0 已经放在了数组的倒数第六个位置。

第七轮遍历时:
- 比较 0 和 1,由于 0 小于 1,不需要交换位置。

第七轮遍历结束后,第七大的数字 0 已经放在了数组的倒数第七个位置。

第八轮遍历时:
- 比较 0 和 1,由于 0 小于 1,不需要交换位置。

第八轮遍历结束后,第八大的数字 0 已经放在了数组的倒数第八个位置。

第九轮遍历时:
- 数组中只剩下一个数字了,不需要继续排序。

最终,数组变为 {0, 0, 0, 1, 1, 1, 1, 1, 1},排序完成。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解冒泡排序算法原理与使用方法 - Python技术站

(0)
上一篇 2023年3月27日
下一篇 2023年3月27日

相关文章

  • 拓扑排序Python实现的过程

    拓扑排序Python实现的过程 拓扑排序是一种常用的有向无环图(DAG)的排序算法,它可以将DAG中的节点按照一定的顺序进行排序。实际应用中,拓扑排序常于任务调度、依赖关系分析等场景。本文将介绍拓扑排序的Python实现过程,并提供两个示例说明。 拓扑排序的实现过程 拓扑排序的实现过程可以分为以下几个步骤: 构建DAG:将有向表示为邻接表或邻接矩阵的形式。 …

    python 2023年5月14日
    00
  • python 密码学示例——理解哈希(Hash)算法

    以下是关于“Python密码学示例——理解哈希(Hash)算法”的完整攻略: 简介 哈希(Hash)算法是一种常用的密码学算法,它可以将任意长度的数据转换为固定长度的数据,通常用于数据的完整性验证和数字签名等场景。在本教程中,我们将介绍如何使用Python实现哈希算法,并提供两个示例。 算法1:MD5哈希算法 MD5哈希算法是一种常用的哈希算法,它可以将任意…

    python 2023年5月14日
    00
  • Python栈算法的实现与简单应用示例

    下面是详细讲解“Python栈算法的实现与简单应用示例”的完整攻略,包含两个示例说明。 栈算法 栈是一种常用的数据结构,它具有后进先出(LIFO)的特点。栈的基本操作包括入栈(push)、出栈(pop)、看栈顶元素(peek)和判断栈是否为空(isEmpty)等。 Python实现栈算法 要实现栈算法,可以使用Python中列表(list)来模拟栈。以下是算…

    python 2023年5月14日
    00
  • Python实现K-近邻算法的示例代码

    下面是详细讲解“Python实现K-近邻算法的示例代码”的完整攻略,包含两个示例说明。 K-近邻法 K-近邻算法是种常用的分类算法,其基本思想将新的数据点与已知数据点进行比较,找到最相似的K个数据点将新的数据点归类为这K个数据中出现最多的类别。K-近邻算法的K值和距离度量方式是法的两重要参数。 Python实现K-近邻算法 要实现K近邻算法,可以使用Pyth…

    python 2023年5月14日
    00
  • 用Python实现插值算法

    以下是关于“用Python实现插值算法”的完整攻略: 简介 插值算法是一种常见的数值分析方法,它可以用于估计未知函数在给定点的值。在本教程中,我们将介绍如何使用Python实现插值算法,包括插值算法的基本原理、插值算法的实现方法、插值算法的优化等。 插值算法的基本原理 插值算法的基本原理是通过已知数据点的函数值来估计未知数据点的函数值。插值算法的实现方法通常…

    python 2023年5月14日
    00
  • Python Numpy教程之排序,搜索和计数详解

    Python Numpy教程之排序,搜索和计数详解 本文将介绍Python Numpy中的排序、搜索和计数函数。这些函数可以帮助我们对数组进行排序、搜索和数操作,从而好地处理和分析数据。 1. 排序函数 1.1 np.sort函数 np.sort函数可以对数组进行排序操作。可以使用以下命令在Python中使用np.sort函数: import numpy a…

    python 2023年5月14日
    00
  • 利用python实现冒泡排序算法实例代码

    下面是详细讲解“利用Python实现冒泡排序算法实例代码”的完整攻略,包含两个示例说明。 冒泡排序算法 冒泡排序算法是一种简单的排序算法,其基本思想是重复地遍历要排序的列表,每次比较相邻的两个元素,如果它们顺序错误就交换它们的位置。重复这个过程,直到整个列表都被排序。 Python实现冒泡排序算法 要实现冒泡排序算法,可以使用Python中的列表(list)…

    python 2023年5月14日
    00
  • 四边形不等式学习笔记

    简要题意 四边形不等式是一种 dp 优化策略。多用于 2D DP。 内容 对于区间 \([l,r]\) 带来的贡献 \(w(l,r)\),如果其满足: 对于 \(L\leq l\leq r \leq R\),\(w(L,r)+w(l,R)\leq w(L,R)+w(l,r)\) 则称 \(w\) 满足四边形不等式。特别地,如果上式符号取等,则称其满足四边形恒…

    算法与数据结构 2023年4月17日
    00
合作推广
合作推广
分享本页
返回顶部