zoukankan      html  css  js  c++  java
  • 数据结构与算法小结——排序(五)

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

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

  • 相关阅读:
    MySql的性能优化
    MySql的备份还原
    MySql的数据目录
    MySql的事务
    MySql的视图
    算法笔记_006:全源最短路径问题【动态规划法】
    算法笔记_005:堆排序问题【变治法】
    算法笔记_004:8枚硬币问题【减治法】
    算法笔记_003:矩阵相乘问题【分治法】
    使用MongoDB和JSP实现一个简单的购物车系统
  • 原文地址:https://www.cnblogs.com/lilei94/p/8395069.html
Copyright © 2011-2022 走看看