数据结构与算法篇-冒泡排序

冒泡排序


核心思路

统一视角:分治策略

  • 分:将数组划分为已排序部分和未排序部分;
  • 治:遍历未排序部分,解决单元素归位问题,增大已排序区间;

或者,更具体点:

  • 分:划分固定比例 1 : (n-1),即 [已排序 | 未排序];
  • 治:先解决单元素归位问题,再扩大已排序区间;
  • 性能:由于划分始终是线性 1 : n-1,路径深度为 n,故复杂度为 O(n^2);

核心逻辑:

  • 分:将数组划分为已排序部分和未排序部分;
  • 治:从右向左遍历未排序部分,将最小值冒泡到未排序部分的开头

状态变化追踪

初始

  • 已排序部分:[0, -1]
  • 未排序部分:[0, n-1]

第1轮(i=0)

操作:从右向左遍历未排序部分[0, n-1],将最小值冒泡到未排序部分的开头

结果

  • 已排序部分:[0, 0]
  • 未排序部分:[1, n-1]

第2轮(i=1)

操作:从右向左遍历未排序部分[1, n-1],将最小值冒泡到未排序部分的开头

结果

  • 已排序部分:[0, 1]
  • 未排序部分:[2, n-1]

第k轮(i=k-1)

操作:从右向左遍历未排序部分[k-1, n-1],将最小值冒泡到未排序部分的开头

结果

  • 已排序部分:[0, k-1]
  • 未排序部分:[k, n-1]

第n-1轮(i=n-2)

操作:从右向左遍历未排序部分[n-2, n-1],将最小值冒泡到未排序部分的开头

结果

  • 已排序部分:[0, n-2]
  • 未排序部分:[n-1, n-1]

算法结束后

结果

  • 已排序区间:[0, n-1]
  • 未排序区间:[n, n-1],空集

实现


性质

  • 稳定性?
  • 原地性?
  • 自适应性?
  • 在线性?
相关推荐
知无不研7 天前
冒泡排序算法
算法·冒泡排序·排序
皮皮哎哟7 天前
冒泡排序与数组传递全解析 一维二维指针数组及二级指针应用指南
c语言·算法·冒泡排序·二维数组·指针数组·传参·二级指针
编程火箭车15 天前
【Java SE 基础学习打卡】36 数组的常见操作
冒泡排序·java se·java 基础·线性查找·数组常见操作·数组增删改·数组拷贝
烛衔溟3 个月前
C语言算法:排序算法入门
c语言·算法·排序算法·插入排序·冒泡排序·选择排序·多关键字排序
Neverfadeaway5 个月前
C语言————冒泡排序(例题2)
c语言·数据结构·算法·冒泡排序·升序排列·降序排列
今天背单词了吗9807 个月前
算法学习笔记:11.冒泡排序——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·学习·算法·排序算法·冒泡排序
ElvInR9 个月前
冒泡排序详解
c语言·c++·排序算法·冒泡排序
D_aniel_9 个月前
排序算法-冒泡排序
java·排序算法·冒泡排序