冒泡排序算法是一种简单的排序算法,它重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就将它们交换位置。它的工作原理如下:依次比较相邻的两个元素,如果顺序错误则交换位置,一轮比较过后,最大(或最小)的元素就会“冒泡”到数列的最后(或最前)位置,然后再对剩下的元素进行相同的操作,直至全部排序完成。
下面以一个简单的例子来说明冒泡排序算法的实现过程:
假设有一个数组 arr = [5, 3, 8, 2, 1],我们要对这个数组进行升序排列。
1. 第一轮比较:从第一个元素开始,比较相邻的两个元素,5和3比较,顺序错误,交换位置,数组变为 [3, 5, 8, 2, 1];接着比较5和8,顺序正确,不做交换;继续比较8和2,顺序错误,交换位置,数组变为 [3, 5, 2, 8, 1];继续比较8和1,顺序错误,交换位置,数组变为 [3, 5, 2, 1, 8];第一轮比较完成后,最大的元素8已经排在了数组的最后。
2. 第二轮比较:从第一个元素开始,比较相邻的两个元素,3和5比较,顺序正确,不做交换;继续比较5和2,顺序错误,交换位置,数组变为 [3, 2, 5, 1, 8];继续比较5和1,顺序错误,交换位置,数组变为 [3, 2, 1, 5, 8];第二轮比较完成后,第二大的元素5已经排在了倒数第二的位置。
3. 第三轮比较:从第一个元素开始,比较相邻的两个元素,3和2比较,顺序错误,交换位置,数组变为 [2, 3, 1, 5, 8];继续比较3和1,顺序错误,交换位置,数组变为 [2, 1, 3, 5, 8];第三轮比较完成后,第三大的元素3已经排在了倒数第三的位置。
4. 第四轮比较:从第一个元素开始,比较相邻的两个元素,2和1比较,顺序错误,交换位置,数组变为 [1, 2, 3, 5, 8];第四轮比较完成后,第四大的元素2已经排在了倒数第四的位置。
5. 第五轮比较:从第一个元素开始,比较相邻的两个元素,1和2比较,顺序正确,不做交换;第五轮比较完成后,第五大的元素1已经排在了倒数第五的位置。
经过以上5轮比较,数组 arr 已经按照升序排列完成。
冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1),是一种稳定的排序算法。在实际应用中,冒泡排序算法适用于对于元素个数较少或者数据基本有序的情况下,但对于数据量较大、需要高效排序的情况下,更适合选择其他更高效的排序算法,如快速排序、归并排序等。