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

冒泡排序(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月14日
    00
  • 八大排序算法的Python实现

    下面是关于“八大排序算法的Python实现”的完整攻略。 1. 八大排序算法 八大排序算法包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、速排序、堆排序和数排序。这些排序算法的实现方式不同,但都可以用来对数据进行排序。 2. Python实现 下面是八排序算法的Python实现。 2.1 冒泡排序 def bubble_sort(arr): n = l…

    python 2023年5月13日
    00
  • python实现kMeans算法

    Python实现kMeans算法的完整攻略 kMeans算法是一种常用的聚类算法,用于将数据集分成k个簇。本文将详细讲解Python实现kMeans算法的整个攻略,包括算法原理、实现过程和示例。 算法原理 kMeans算法的基本思想是将数据集分成k个簇,每个包含距离最近的数据。在Python中,可以使用scikit-learn库来实现kMeans算法。 具体…

    python 2023年5月14日
    00
  • python实现拓扑排序的基本教程

    下面是详细讲解“Python实现拓扑排序的基本教程”的完整攻略。 1. 什么是拓扑排序? 拓扑排序是指将有向无环图(DAG)中的节点按照一定的顺序进行排序的过程。在拓扑排序中,如果存在一条从A到节点B的有向,则节点A必须排在节点B的前面。 2. Python实现拓扑排序的基本方法 下面是一个Python实现拓扑排序的示例: from collections …

    python 2023年5月14日
    00
  • python实现高斯模糊及原理详解

    Python实现高斯模糊及原理详解 高斯模糊是一种常用的图像处理技术,它可以使图像变得更加平滑,减少噪点和细节。在本文中,我们将介绍高斯模糊的原理,并提供Python实现高斯模糊的代码。 高斯模糊的原理 高斯模糊的原理是基于高斯函数的卷积运算。高斯函数是一种钟形曲线,它可以用来描述一组数据的分布情况。在图像处理中,我们可以将高斯函数应用于图像的像素值,从而实…

    python 2023年5月14日
    00
  • 详解Python查找算法的实现(线性,二分,分块,插值)

    下面是关于“详解Python查找算法的实现(线性,二分,分块,插值)”的完整攻略。 1. 查找算法概述 查找算法是一种用在数据集合中查找特定元素的算法。常见的查找算法包括线性查找、二分查找、分块查找和插值查找。在Python中,我们可以使用各种数据结构和算法实现这些查找算法。 2. 查找算法实现 2.1 线性查找 线性查找是一种简单的查找算法,它的基本思想是…

    python 2023年5月13日
    00
  • 详解Python中图像边缘检测算法的实现

    详解Python中图像边缘检测算法的实现 图像边缘检测是计算机视觉中的一个重要问题,它的目的是在图像中检测物体的边缘。在Python中,我们可以使用许多库来实现图像边缘检测,例如OpenCV、Scikit-image和Mah等。本文将详细讲解Python中图像边缘检测算法的实现,包括Sobel算子、Canny算子和Laplacian算子等。 Sobel算子 …

    python 2023年5月14日
    00
  • Python实现冒泡排序算法的示例解析

    冒泡排序是一种简单的排序算法,它的基本思想是通过不断交换相邻的元素,将较大的元素逐渐“冒泡”到数组的末尾。在Python中,我们可以使用两层循环来实现冒泡排序。 下面是一个示例,演示如何使用Python实现冒泡排序算法: def bubble_sort(arr): n = len(arr) # 外层循环控制排序的轮数 for i in range(n): #…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部