news 2026/6/24 20:30:14

lec1:算法分析——以插入排序和归并排序为例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
lec1:算法分析——以插入排序和归并排序为例

lec1-算法导论

算法分析:插入排序,渐近分析,归并排序,递归式

【算法】:定义明确的计算过程,接收一个或一组值作为输入,经过一系列计算步骤将输入转换为一个或一组值作为输出。
简单来说,算法就是一套能把输入变成输出的、清晰且可执行的步骤。

插入排序 Insertion sort

伪代码如下:

INSERTION-SORT(A)forj=2to A.length key=A[j]// 取出当前要插入的元素 // 将 A[j]插入到已排序的序列 A[1..j-1]中 i=j -1whilei>0and A[i]>key A[i+1]=A[i]// 比key大的元素向后移动一位 i=i -1A[i+1]=key // 将key插入到正确位置

插入排序好比“抓牌”,手里握着的是前j-1i张牌(已经排好序的),接下来每抓一张牌,就和第i张牌比较。
如果比i牌大,就放在i+1的位置;如果比i牌小,则i牌后移,把这张新牌插进去,以此类推……直至j张牌有序。

示例如上。

运行时间T(n)

T(n) = 每行代码执行的次数 * 该行代码的单位时间

注意:for循环最后还要判断一次条件不成立;tj表示第j次外层循环时while的循环次数。

T(n) = c1n+c2(n-1)+c4(n-1)+c5∑j=2ntj\sum_{j=2}^n t_jj=2ntj+c6∑j=2n(tj−1)\sum_{j=2}^n (t_j-1)j=2n(tj1)+c7∑j=2n(tj−1)\sum_{j=2}^n (t_j-1)j=2n(tj1)+c8(n-1)
最好情况:已经拍好序了,不用后移。(tj= 1)

T(n) = (c1+c2+c4+c5+c8)n - (c2+c4+c5+c8)

最坏情况:数组逆序,每次移动j-1个位。(tj= j)

T(n) = (c 5 2\frac{c~5~}{2}2c5+c 6 2\frac{c~6~}{2}2c6+c 7 2\frac{c~7~}{2}2c7)n2+(c1+c2+c4+c 5 2\frac{c~5~}{2}2c5-c 6 2\frac{c~6~}{2}2c6-c 7 2\frac{c~7~}{2}2c7+c8)n - (c2+c4+c5+c8)

平均情况:算法在规模为n的所有输入下的期望运行时间。

与机器无关的时间分析——渐近分析

Θ(g(n))表示一个函数集合:
Θ(g(n))={f(n):存在正常数 c1,c2,n0,使得对所有 n≥n0,有 0≤c1≤g(n)≤f(n)≤c2g(n)}

当n足够大时,f(n)的增长速度和g(n)同阶,被夹在c1g(n)和c2g(n)之间。

注意:丢弃低阶项;忽略首项系数

插入排序的时间复杂度分析

T(n)= Θ(n2)
插入排序适合小规模的排序,大规模排序完全不适用!

归并排序

分支思想

  1. 如果n = 1,已完成;
  2. 递归划分成两个子数组;
  3. 合并子数组
    示例如上
    T(n)={Θ(1),n=12T(n/2)+Θ(n),n>1 T(n)=\begin{cases}Θ(1), & n = 1 \\ 2T(n/2)+Θ(n) , & n>1 \end{cases}T(n)={Θ(1),2T(n/2)+Θ(n),n=1n>1

递归树

递归树求解归并排序的递归式

总结

归并排序在最坏情况下渐近性能优于插入排序。(n>30)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 20:27:57

从零部署:在校园服务器上通过MobaXterm与Anaconda搭建PyTorch深度学习环境

1. 校园服务器深度学习环境搭建全攻略 第一次接触校园服务器做深度学习研究,那种既兴奋又忐忑的心情我特别理解。记得当年我对着命令行界面手足无措的样子,现在想来还挺有意思。本文将手把手带你用MobaXterm和Anaconda在校园服务器上搭建PyTorch环境&…

作者头像 李华
网站建设 2026/4/13 13:10:11

从QGIS到GeoServer:图形绘制与地图服务发布的完整指南

1. QGIS图形绘制基础操作 第一次打开QGIS时可能会被密密麻麻的工具栏吓到,但实际绘制图形比想象中简单得多。我习惯先创建一个空白项目(CtrlN),就像准备一张虚拟画布。点击左侧"图层"面板右键选择"新建Shapefile图…

作者头像 李华
网站建设 2026/4/13 13:10:09

从到的木马免杀之旅(过卡巴)仍

开发个什么Skill呢? 通过 Skill,我们可以将某些能力进行模块化封装,从而实现特定的工作流编排、专家领域知识沉淀以及各类工具的集成。 这里我打算来一次“套娃式”的实践:创建一个用于自动生成 Skill 的 Skill,一是用…

作者头像 李华
网站建设 2026/4/13 13:09:30

RMBG-1.4 游戏美术管线:AI 净界加速角色与道具素材制作

RMBG-1.4 游戏美术管线:AI 净界加速角色与道具素材制作 1. 项目简介 今天给大家介绍一个游戏美术制作的"神器"——RMBG-1.4 AI净界工具。这个工具基于BriaAI开源的最新图像分割模型,专门解决游戏开发中最头疼的背景抠图问题。 想象一下这样…

作者头像 李华
网站建设 2026/4/13 13:09:07

别再死记硬背了!用JavaScript手写一个三角函数计算器(附完整代码)

用JavaScript打造高精度三角函数计算器:从数学原理到工程实践 三角函数计算器看似简单,但当你真正动手实现时,会发现其中蕴含着许多值得深思的工程细节。本文将带你从零开始构建一个完整的三角函数计算器,不仅支持基本的sin、cos、…

作者头像 李华
网站建设 2026/4/13 13:08:27

游戏物理破坏可摧毁环境与碎片生成

游戏物理破坏:可摧毁环境与碎片生成的魅力 在现代游戏中,物理破坏系统已成为提升沉浸感的核心技术之一。无论是子弹击碎玻璃、爆炸摧毁墙壁,还是车辆撞击后飞散的零件,逼真的可摧毁环境与碎片生成都能让玩家感受到动态世界的真实…

作者头像 李华