第二章 算法基础

本文探讨了两种经典的排序算法——插入排序和归并排序。插入排序通过逐步将元素插入已排序部分来构建有序序列,其正确性通过循环不变式证明。而归并排序利用分治策略,通过递归地将数组分成两半,排序后再合并,确保排序正确。文章分析了算法在最坏情况下的时间复杂度,并重点关注主要的增长量级。
摘要由CSDN通过智能技术生成

2.1 插入排序

for j <- 2 to length[A]
	do key <- A[j]
    //将A[j]插入A[1...j-1]
    i = j - 1
    while i > 0 and A[i] > key
         A[i + 1] <- A[i]
         i <- i - 1
    A[i + 1] <- key

正确性证明:循环不变式A[1…j-1]

  1. 初始化:循环第一次迭代前为真
  2. 保持:若循环的某次迭代前为真,那么下次迭代前它仍然为真
  3. 终止:在循环终止时,不变式提供一个性质,该性质有助于证明算法正确性

2.2 分析算法

  • 描述算法所用资源及其代价的模型:随机访问机RAM模型

  • 最坏情况与平均情况分析:往往考虑最坏情况(例如输入数组是反向排好序的)

  • 增长量级:只考虑运行时间公式中最重要的项,如Θ(n^2)

2.3 算法设计

  • 分治法(Divide Conquer Combine)

    归并排序

    image-20210308152734063

  • 归并排序的分析:递归树

    image-20210308153637122

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值