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

冒泡排序


核心思路

统一视角:分治策略

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

或者,更具体点:

  • 分:划分固定比例 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],空集

实现


性质

  • 稳定性?
  • 原地性?
  • 自适应性?
  • 在线性?
相关推荐
烛衔溟2 个月前
C语言算法:排序算法入门
c语言·算法·排序算法·插入排序·冒泡排序·选择排序·多关键字排序
Neverfadeaway4 个月前
C语言————冒泡排序(例题2)
c语言·数据结构·算法·冒泡排序·升序排列·降序排列
今天背单词了吗9806 个月前
算法学习笔记:11.冒泡排序——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·学习·算法·排序算法·冒泡排序
ElvInR7 个月前
冒泡排序详解
c语言·c++·排序算法·冒泡排序
D_aniel_8 个月前
排序算法-冒泡排序
java·排序算法·冒泡排序
云边有个稻草人10 个月前
【数据结构初阶第十八节】八大排序系列(上篇)—[详细动态图解+代码解析]
算法·冒泡排序·堆排序·希尔排序·八大排序·快排·直接插入排序
y.Ghost10 个月前
C语言实现的常见排序算法
c语言·数据结构·排序算法·插入排序·冒泡排序·选择排序·快速排序
咩咩大主教10 个月前
Go语言实现十大排序算法超细节图片讲解
数据结构·算法·golang·排序算法·冒泡排序·堆排序·快速排序
juechen3331 年前
两种交换排序算法--冒泡,快速
数据结构·算法·排序算法·冒泡排序·快速排序