作为一名对技术充满热情的学习者,我一直以来都深刻地体会到知识的广度和深度。在这个不断演变的数字时代,我远非专家,而是一位不断追求进步的旅行者。通过这篇博客,我想分享我在某个领域的学习经验,与大家共同探讨、共同成长。请大家以开放的心态阅读,相信你们也会在这段知识之旅中找到启示。
前言
冒泡排序顾名思义,想泡泡一样慢慢冒上去,今天,我们就来深刻理解冒泡排序的排序步骤,通过一些联系给大家讲解如何解决有关冒泡排序算法的一些问题。
一、什么是冒泡排序
冒泡排序(Bubble Sort)是一种基础的排序算法。它的工作原理是通过重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来
。遍历数列的工作是重复进行的,直到没有再需要交换的元素为止,这时数列就完全排序好了。
- 冒泡排序的名称来自于较小的元素会像“气泡”一样逐渐通过交换“浮”到数列的顶端,而较大的元素则沉到底部。
这里有一个简单的冒泡排序算法的例子:
假设我们有一个数组 arr[5] = {5, 2, 9, 1, 5},我们要对它进行升序排序。
冒泡排序的具体步骤如下:
1.从数组的第一个元素开始,比较相邻元素的值。
2.如果前一个元素比后一个元素大(针对升序排序),交换它们的位置。
3.对数组的每一对相邻元素重复步骤1和2,直到数组的最后一个元素,这时最大的数就“冒泡”到了数组的最后位置。
4.因为最大的数已经在正确的位置了,所以可以忽略它,对数组的剩余部分重复步骤1到3的过程。
重复上述过程,每次遍历时忽略已确定位置的元素,直到没有任何一对数字需要交换,排序就完成了。
以下是对上述数组进行冒泡排序的过程:
初始数组: [5, 2, 9, 1, 5]
- 第一趟冒泡:[2, 5, 1, 5, 9](最大的数9已到达最终位置)
- 第二趟冒泡:[2, 1, 5, 5, 9](较大数5进行了移动)
- 第三趟冒泡:[1, 2, 5, 5, 9](较小的数1移到了开头)
- 第四趟冒泡:[1, 2, 5, 5, 9](数列已经排序完成,没有任何交换)
虽然冒泡排序在理解和实现上非常简单,但它通常不适合大规模数据的排序,因为其平均情况和最坏情况的时间复杂度都是O(n^2),其中n是数组的大小。因此,在需要高效排序的应用中,通常会采用更高效的算法,如快速排序、归并排序或堆排序
二、实战练习
现在我们对下面的数组冒泡排序:
arr = [64, 34, 25, 12, 22, 11, 90]
下面是详细步骤,希望同学们可以先自己练习:
初始数组状态:
[64, 34, 25, 12, 22, 11, 90]
- 第1趟冒泡:
(64, 34) 比较,需要交换 -> [34, 64, 25, 12, 22, 11, 90]
(64, 25) 比较,需要交换 -> [34, 25, 64, 12, 22, 11, 90]
(64, 12) 比较,需要交换 -> [34, 25, 12, 64, 22, 11, 90]
(64, 22) 比较,需要交换 -> [34, 25, 12, 22, 64, 11, 90]
(64, 11) 比较,需要交换 -> [34, 25, 12, 22, 11, 64, 90]
(64, 90) 比较,不需交换 -> [34, 25, 12, 22