数据结构与算法小结——排序(五)

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 改进冒泡排序算法相关

  可以看到,改进冒泡排序主要改进了最好情况下的排序效率。

 

posted @ 2018-01-31 22:01  Yutoti_三石  阅读(173)  评论(0编辑  收藏  举报