冒泡排序(JAVA)

181 阅读2分钟
  • 概述
    • 冒泡排序(Bubble Sort)是一种计算机科学领域较简单的排序算法
    • 在每一次循环中最大元素通过交换移动到数组一端,所以称为冒泡排序
  • 原理
    1. 对数组中相邻的元素两两比较,当前一个元素>后一个元素时,则进行交换
    2. 对数组中所有相邻元素进行比较,当最后一对相邻元素比较后,最后的元素则为最大元素
    3. 此时一次冒泡排序结束,将下一次冒泡排序的范围减小,去除掉最后的元素,重复执行1,2步骤
    4. 直到数组中元素不需要在进行比较,完成排序
  • 流程
    • 白色表示数组中比较相邻元素的范围
    • 绿色代表当前需要比较的两个元素
    • 红色代表完成冒泡的部分 第一轮冒泡排序.png
  • 代码演示 bubble_one.png
  • 代码优化
    • 减少冒泡排序的次数
      • 产生问题
        • 对于上述代码中,在极端情况下如果对于一个有序的数组进行冒泡排序
        • 还是会执行多次冒泡来比较元素,直到没有可以比较的元素才会结束冒泡排序
      • 解决思路
        • 为了减少不必要的冒泡次数,我们认为当在一次冒泡排序中没有元素进行交换时则表示当前数组中元素是有序的
        • 则不再需要进行下一次冒泡排序,直接结束冒泡排序
      • 代码演示 bubble_two.png
    • 减少元素的比较次数
      • 产生问题
        • 对于上述代码中,在极端情况下当元素在每轮冒泡排序中会进行没必要的比较
      • 解决思路
        • 为了减少在每轮冒泡排序中没必要的比较次数
        • 在每轮对相邻元素进行比较时记录最后一次发生交换的元素索引位置
        • 我们认为最后一次发生交换后,当前索引位置之后的元素都是有序的
        • 不需要在下一次冒泡排序中在对之后的元素进行比较,将当前交换元素的索引位置作为下一次冒泡排序的边界
      • 代码演示
        bubble_three.png
  • 扩展知识
    • 冒泡排序的时间复杂度为O(n2)
    • 冒泡排序为稳定的排序算法