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

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

  • 相关阅读:
    20180813 mysql 手动整理
    20180811 mysql 整理
    20180810 mysql
    20180808 第一阶段项目展示
    20180807 接近第一阶段项目完成 心里话
    20180730 轮播 (加定时器 鼠标移入停止 移除继续轮播 点击小图标换大图片)
    20180730 表格的删除 增加 编辑内容
    10.10日PHP MAC
    10.09日PHP MAC
    数据库类的封装
  • 原文地址:https://www.cnblogs.com/lilei94/p/8395069.html
Copyright © 2011-2022 走看看