zoukankan      html  css  js  c++  java
  • 冒泡排序学习笔记

    冒泡排序

    排序过程

    基本原理

        从序列头开始,进行若干次遍历(第一次遍历的结束位置为序列尾,每进行一次遍历结束位置向前移动一位),遍历过程中比较相邻的两个元素,根据比较结果以及预期的排序效果,交换元素的位置,每一遍历结束,会有一个元素被“挪动”到正确的位置,最后一次遍历结束,序列达到预期的排序效果。


    思考1:遍历次数?比较次数?挪动次数?

        (1)最理想情况,即序列恰好与预期排序效果相符:

                        遍历次数 = 1;

                        比较次数 = n-1;

                        挪动次数 = 0;

        (2)最糟糕情况,即序列恰好与预期排序效果相反:

                        遍历次数 = n-1;

                        比较次数 = n(n-1)/2 =挪动次数(由于序列完全逆序,所以每次比较后都需要挪动元素)

        思考1.1:程序如何识别最理想情况?如何判断序列排序情况?

                        某次遍历过程中挪动元素的次数为0,则序列达到预期排序效果,若在第一次遍历过程中,没有挪用元素,则序列恰好符合预期排序效果。

    思考2:第一次遍历结束的位置为序列尾,每进行一次遍历,下次遍历的结束位置向前移动一位”这句话如何理解?

        每次遍历的目的是什么?结果是什么?答:每次遍历的目的是将序列中的一个元素挪到它真正该待的地方,每次遍历的结果是一个元素被挪到了正确的位置,既然能够确定这些元素现在已经待在了正确的位置,那么后续遍历中就没有“检查的必要”。


    优化

    (1)及时判断出序列的状态,即序列是否已经有序,是否还有必要进行下一次的遍历。

    (2)减少排序过程中元素挪动的次数——选择排序算法

    评价

    (1)简单稳定

    (2)效率较低,时间复杂度为O(n2),空间复杂度为O(1)

    (3)不可并发

  • 相关阅读:
    MyOD-Linux od命令的实现
    20175320 2018-2019-2 《Java程序设计》第9周学习总结
    MyCP-实现文件的复制以及进制转换
    20175320 2018-2019-2 《Java程序设计》第8周学习总结
    2018-2019-2 20175320实验二《Java面向对象程序设计》实验报告
    20175320 2018-2019-2 《Java程序设计》第7周学习总结
    类定义20175320
    20175320 2018-2019-2 《Java程序设计》第6周学习总结
    结对编程项目-四则运算阶段性总结
    算法复习周------递归之“合并排序”
  • 原文地址:https://www.cnblogs.com/XiaoZhengYu/p/12439101.html
Copyright © 2011-2022 走看看