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

冒泡排序(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二分法查找算法实现方法【递归与非递归】 二分法查找算法是一种高效的查找算法,它的基本思想将有序数组分成两部分,然后判断目标值在哪一部分,再递归地在该部分中查找目值。本文将介绍Python中二分法查找算法的实现方法,包括递归和非递归两种方式。 二分法查找法实现方法 递归实现 递归实现二分法查找算法的基本思想是将有序数组分成两部分然后判断目标值在哪一…

    python 2023年5月13日
    00
  • python人工智能算法之人工神经网络

    Python人工智能算法之人工神经网络 人工神经网络是一种常用的机器学习算法,它可以用于分类、回归和聚类等问题。本文将细介绍Python中人工神经网络的流,包括数据预处理、模型构建和模型训练等步骤。 1.预处理 在使用人工神经网络算法之前,需要对数据进行预处理。具体来说,需要进行以下步骤: 1. 数据清洗 数据清洗是指对数据去重、缺失值处理、异常值处理等操作…

    python 2023年5月14日
    00
  • python实现朴素贝叶斯算法

    Python机器学习算法之朴素贝叶斯算法(Naive Bayes) 什么是朴素贝叶斯算法? 朴素贝叶算法是一种常见的分类算法,它的核心思想基于贝叶斯定理和特征条件独立假设,通过计算验概率来进行分类。在朴素贝叶斯算法中,我们通常使用极大似然估计来估计先验概率和条件概。 朴素贝叶斯算法的原理 朴素贝叶斯算法是一种基于贝叶斯定理的分类算法,它核心思想是通过计算后验…

    python 2023年5月13日
    00
  • Python全排列操作实例分析

    下面是详细讲解“Python全排列操作实例分析”的完整攻略。 1. 什么是全排列 全排列是指将一组数按照定的顺序进行排列,使得每个数都在排列中出现且只出现一次。例如,对于数列[1, , 3],它的全排列为[1, 2, 3]、[1, 3, 2]、[2, 1, ]、[2, 3, 1]、[3, 1, 2]、[3, 2, 1]。 2. Python现全排列 Pyth…

    python 2023年5月14日
    00
  • 基于Python代码实现Apriori 关联规则算法

    基于Python代码实现Apriori 关联规则算法 Apriori算法是一种常用的关联规则挖掘算法,它可以从大规模数据集中挖掘出频繁项集和关联规则。在Python中,可以使用多种库来实现Apriori算法,包括mlxtend、pyfpgrowth等。本文将详细讲解基于Python代码实现Apriori关联规则算法的完整攻略,包括算法原理、Python实现过…

    python 2023年5月13日
    00
  • 基于Python实现迪杰斯特拉和弗洛伊德算法

    基于Python实现迪杰斯特拉和弗洛伊德算法的完整攻略 迪杰斯特拉和弗洛伊德算法是两种常用的图论算法,用于求解最短路径问题。在Python中,可以使用networkx和numpy库实现迪杰斯特拉和弗洛伊德算法。本文将详细讲解Python实现迪杰斯特拉和弗洛伊德算法的整个攻略,包括算法原理、Python实现过程和示例。 算法原理 迪杰斯特拉算法 迪杰斯特拉算法…

    python 2023年5月14日
    00
  • python计算圆周率pi的方法

    Python计算圆周率pi的方法 圆周率pi是一个非常重要的数学常数,它的值约为3.14159265358979323846。在Python中,我们可以使用多种方法算圆周率pi,本文将介绍其中的两种。 方法一:使用库计算圆周率pi Python中的math库提供一个常数pi,它表示圆周率的值。我们直接使用math库中的pi常数来计算圆周率,如下所示: imp…

    python 2023年5月14日
    00
  • 【ACM博弈论】SG函数入门(1):从巴什博奕到尼姆游戏

    在我小时候以前做题的时候,遇到博弈题往往都是漫无目的地打表找规律,或者找一些特殊情况但是没有很好的分析方法。 其实博弈题是有比较套路的解题方法的,那就是利用SG函数,第一节不会讲到SG函数的具体用法,我们先来博弈入个门,学习一下最基本的博弈类型:Nim游戏。 ? 作者:Eriktse? 简介:19岁,211计算机在读,现役ACM银牌选手?力争以通俗易懂的方式…

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