算法导论整理

1.算法基础
1.插入排序(Insertion-Sort)

for j=2 to A.length:
	key = A[j]
	//insert A[j] into the  sorted sequence 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],右手上是要插入的牌A[j],剩下的是桌子上(待排序)的牌A[j+1…n]

证明:循环不变式(loop invariants):
初始化:首先证明循环之前成立。因为j=2,所以j-1=1。在循环开始前,A[1…j-1]
(就是A[1]),符合排序。
保持:需要证明如果某次迭代之前成立,则下次迭代也成立(例:j=8之前和当j=8)
终止:判断循环终止出现的性质证明成立。因为j=2,3,4…n,当n=n+1,循环终止,此时排好的A[1…n]里与原数组所有元素相同,且已经排好序,所以算法成立。

2.指针
表示一个数组或对象的变量—>指向数组或对象的数据的内存地址。(不是引用,引用是给内存地址起别名)
e.g: 设x的属性为f
当赋值y=x---->x.f =y.f—>因为x,y都指向了同一个对象。
指针不指向任何对象,则指针为NIL。

3.时间复杂度
插入排序
总运行时间: T(n)=1n+1(n-1)+1*(n-1)+(t2+…tn)+((t2-1)+…(tn-1))+((t2-1)+…(tn-1))+1*(n-1)
最佳情况:n
最坏情况:Theta n的平方

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值