数据结构与算法小结——排序(五)
3. 交换排序
冒泡排序可以说是我接触的第一个排序算法了,现在知道,它属于交换排序中的一类。交换排序有三个:简单交换排序、经典冒泡排序和改进的冒泡排序
3.1 简单交换排序
简单交换排序即是i从1开始,让每一个元素与后面的元素比较,如果后面的小则将其交换到第i位来,i从1到n循环。比较和交换的次数都很多,效率低,不常用。
3.2 经典冒泡排序
经典冒泡有两层循环,第一层循环n次,第二层也循环n次,其主要思想是:通过相邻元素之间的两两比较,把小的元素逐渐浮到上面来,具体做法图 1:
图 1 经典冒泡排序算法流程
经典冒泡排序的时间、空间复杂度,稳定性及应用场合如图 2:
图 2 经典冒泡排序算法相关
可以看大,无论初始待排序序列如何排列,经典冒泡排序的最好、最好、平均时间复杂度都是O(n2)。但如果初始序列基本有序,希望减小其时间复杂度,可引出下面的改进的冒泡排序算法。
3.3 改进的冒泡排序
为了提高冒泡排序在最好情况下的时间复杂度性能,提出了改进的冒泡排序算法,其主要思想是,在第二层循环(即比较和交换的循环)中加入flag,若上一次i循环(即外层的循环)发生了交换,则flag为true,若上层没有交换,则flag始终保持false,直接break。图示为图 3。
图 3 改进的冒泡排序算法流程
改进的冒泡排序算法的时间、空间复杂度,稳定性及应用场合如图 4。
图 4 改进冒泡排序算法相关
可以看到,改进冒泡排序主要改进了最好情况下的排序效率。