数据结构与算法(Dart)之插入排序(十四)

将数组分为已排序和未排序两部分,每次从未排序的部分取出一个元素插入到已排序部分的适当位置。

稳定性 根据查入的位置,插入排序在排序的过程中,始终保持元素的在整体元素中的相对位置不变,所以是稳定的排序算法。

时间复杂度

  • 在最好的情况下,即是数组本身有序的情况下,只需要遍历一遍即可,这时候的时间复杂度取决于元素个数,为:O(n)。

  • 在最坏的情况下,内外都要循环一次,所以这时候时间复杂度为O(n²)。

  • 平均时间复杂度为:O(n²)

scss 复制代码
/// 插入排序
insertionSort(List<int> src) {
  for (int i = 1; i < src.length; i++) {
    int temp = src[i]; // 将当前元素存储到临时变量 temp 中
    int j = i - 1; // j 表示已排序部分的最后一个元素的索引

    // 在已排序部分从后往前查找,找到合适位置插入当前元素
    while (j >= 0 && temp < src[j]) {
      src[j + 1] = src[j]; // 当前元素比已排序部分的元素小,将元素后移一位
      --j; // 向前遍历
      // 更新排序结果回调
    }
    src[j + 1] = temp; // 插入当前元素到已排序部分的正确位置
    print("第 $i 轮插入");
  }

  print("插入排序, src:$src \n");
}

void main() {
  insertionSort([36, 3, 4, 2, 1, 6, 5, 9, 7, 8, 10]);
}

参考资料

Python 数据结构与算法详解

相关推荐
leisoo80979 小时前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
luj_176811 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
郝学胜-神的一滴12 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程
爱编程的小新☆12 小时前
【LeetCode】从递归到 Flood Fill:5 道题吃透 DFS 的选择、回溯与标记
java·算法·leetcode·深度优先·回溯·flood fill
Water_Sunzhipeng12 小时前
2024牛客暑期多校训练营1
算法
hetao173383712 小时前
2026-08-09~08-14 hetao1733837 的刷题记录
c++·算法
技术小黑12 小时前
RNN算法实战系列06 | LSTM 实现糖尿病探索与预测
rnn·算法·lstm
疯狂打码的少年12 小时前
【数据结构】二叉树的性质(五大性质+计算)
数据结构·笔记·算法
wabs66613 小时前
关于图论【A*算法 | 卡码网127.骑士的攻击的思考】
数据结构·算法·图论·卡码网·广搜的改进版
CIO_Alliance13 小时前
AI认知系列(3)| 数据、算法、算力、场景四要素协同
人工智能·算法·ipaas·系统集成·企业cio联盟·企业级ai化转型