冒泡排序是一种简单的排序方式,其原理是两两比较,将较大的值放右边,较小的值放左边,经过多轮的比较,最终将给定的值排好顺序。
举个例子
假设给定初始顺序如下的几个数字:6,2,7,4,7,9,1
我们用冒泡排序方式将数字按从小到大的顺序排序
第一轮,第一次,对比第一个数字6和第二个数字2,因为6比2大,所以需要交换6和2的位置
第一轮,第二次,对比第二个数字6和第三个数字7,因为6比7小,所以不需要交换位置
第一轮,第三次,比较第三个数字7和第四个数字4,因为7比4大,所以交换7和4的位置
第一轮,第四次,比较第四个数字7和第五个数字7,因为值一样,不需要交换位置
第一轮,第五次,比较第五个数字7和第六个数字9,因为7比9小,不需要交换位置
第一轮,第六次,比较第六个数字9和第七个数字1,因为9比1大,所以交换9和1的位置
第一轮比较结束,至此,将这些数字中最大的数字9排到最右边,9这个数字就不动了,不再参与后续比较
接下来开始第二轮比较
第二轮,第一次,比较第一个数字2和第二个数字6,因为2比6小,不需要交换位置
第二轮,第二次,比较第二个数字6和第三个数字4,因为6比4大,所以交换6和4的位置
第二轮,第三次,比较第三个数字6和第四个数字7,因为6比7小,不需要交换位置
第二轮,第四次,比较第四个数字7和第五个数字7,因为一样大,不需要交换位置
第二轮,第五次,比较第五个数字7和第六个数字1,因为6比1大,所以交换7和1的位置
第二轮比较结束,这一轮将第二大的数字7排到了右边,这个7的位置不用动了,不再参与后续比较
接下来,开始第三轮比较
第三轮,第一次,比较第一个数字2和第二个数字4,因为2比4小,不需要交换位置
第三轮,第二次,比较第二个数字4和第三个数字6,因为4比6小,不需要交换位置
第三轮,第三次,比较第三个数字6和第四个数字7,因为6比7小,不需要交换位置
第三轮,第四次,比较第四个数字7和第五个数字1,因为7比1大,所以需要交换7和1的位置
第三轮比较结束,这一轮,将第三大(和第二大一样)的数字7排到了右边,这个7也不动了,不再参与后续比较
然后开始第四轮比较
第四轮,第一次,比较第一个数字2和第二个数字4,因为2比4小,所以不需要交换位置
第四轮,第二次,比较第二个数字4和第三个数字6,因为4比6小,不需要交换位置
第四轮,第三次,比较第三个数字6和第四个数字1,因为6比1大,需要交换6和1的位置
第四轮结束,这一轮,我们将第四大的数字6排到了右边,数字6也不动了,不再参与后续比较
接着进行第五轮比较
第五轮,第一次,比较第一位数字2和第二位数字4,因为2比4小,所以不需要交换位置
第五轮,第二次,比较第二位数字4和第三位数字1,因为4比1大,所以需要交换4和1的位置
第五轮结束,我们将第五大数字4放到了右边,数字4的位置不动了,不再参与后续比较
接着进行第六轮比较,第六轮只剩下第一位2和第二位1比较了,因为2比1大,所以需要交换2和1的位置
第六轮结束,这样整个排序就完成了,得到了最终的结果
总结:
- 冒泡排序的时间复杂度是O(n^2),实际使用的时候可能会经过一些优化,时间复杂度要稍微小一些,空间复杂度为O(1)
- 冒泡排序是一种稳定的排序算法,相等的元素在排序后会保持原来的顺序不变。
今天开始要写一些算法相关的笔记啦,先自己弄懂,然后以图文的方式记录,加深印象,提升自己在算法方面的不足。这一系列给它取个名字,就叫《算法绘本》吧,加油。