《算法导论》学习笔记:2.1 插入排序
2018-02-18 21:12
337 查看
一、笔记
1.循环不变式(留待补充):
(1)初始化:循环的第一次迭代之前,该式为真。
(2)保持:每次循环时保持真。如果n=i为真,则n=i+1为真。
(3)终止:循环终止时我们可证明算法是正确的。
二、源码(Python):
1.插入排序(Python)array = [4,6,34,56,23,232] #测试用:原数组
print('------排序前-------')
for n in range(6):
print(array
) #测试用:打印原数组
for j in range(1,6):
key = array[j]
i = j-1
while i >= 0 and array[i] > key:
array[i+1] = array[i]
i = i - 1
array[i+1] = key
print('------排序后-------')
for n in range(6):
print(array
) #测试用:打印分组后数组三、练习题
1.用上述算法说明A={31,41,59,26,41,58}的执行过程。
【答】31->31,41->31,41,59->26,31,41,59->26,31,41,41,59->26,31,41,41,58,59
2.修改上述算法,改为非升序
【答】Python源码如下:array = [31,41,59,26,41,58]#原数组
print('------排序前-------')
for n in range(6):
print(array
)
for j in range(1,6):
key = array[j]
i = j - 1
while i >= 0 and array[i] < key:
array[i+1] = array[i]
i = i - 1
array[i+1] = key
print('------排序后-------')
for n in range(6):
print(array
)
3.考虑以下查找问题:
输入:n个数的一个序列A=<a1,a2,...,an>和一个值v。
输出:下标i使得v=A[i]或者当v不在A中出现时,v为特殊值NIL。
写出线性查找的代码,扫描整个序列来查找v。使用一个循环不变式来证明你的算法是正确的。
【答】
(1)代码(Python):array = [31,41,59,26,41,58] #测试用:原数组
v = 159
flag = False
for i in range(1,6):
if array[i] == v:
print(i)
flag = True
if flag == False:
v = 'NIL'
print(v)(2)证明:
初始化:
保持:
终止:
1.循环不变式(留待补充):
(1)初始化:循环的第一次迭代之前,该式为真。
(2)保持:每次循环时保持真。如果n=i为真,则n=i+1为真。
(3)终止:循环终止时我们可证明算法是正确的。
二、源码(Python):
1.插入排序(Python)array = [4,6,34,56,23,232] #测试用:原数组
print('------排序前-------')
for n in range(6):
print(array
) #测试用:打印原数组
for j in range(1,6):
key = array[j]
i = j-1
while i >= 0 and array[i] > key:
array[i+1] = array[i]
i = i - 1
array[i+1] = key
print('------排序后-------')
for n in range(6):
print(array
) #测试用:打印分组后数组三、练习题
1.用上述算法说明A={31,41,59,26,41,58}的执行过程。
【答】31->31,41->31,41,59->26,31,41,59->26,31,41,41,59->26,31,41,41,58,59
2.修改上述算法,改为非升序
【答】Python源码如下:array = [31,41,59,26,41,58]#原数组
print('------排序前-------')
for n in range(6):
print(array
)
for j in range(1,6):
key = array[j]
i = j - 1
while i >= 0 and array[i] < key:
array[i+1] = array[i]
i = i - 1
array[i+1] = key
print('------排序后-------')
for n in range(6):
print(array
)
3.考虑以下查找问题:
输入:n个数的一个序列A=<a1,a2,...,an>和一个值v。
输出:下标i使得v=A[i]或者当v不在A中出现时,v为特殊值NIL。
写出线性查找的代码,扫描整个序列来查找v。使用一个循环不变式来证明你的算法是正确的。
【答】
(1)代码(Python):array = [31,41,59,26,41,58] #测试用:原数组
v = 159
flag = False
for i in range(1,6):
if array[i] == v:
print(i)
flag = True
if flag == False:
v = 'NIL'
print(v)(2)证明:
初始化:
保持:
终止:
相关文章推荐
- 《算法导论》学习笔记——插入排序的java实现
- 算法导论学习2.1 插入排序
- 算法导论2.1-insertsort算法(插入排序)
- 《算法导论》读书笔记--第二章 2.1 插入排序
- 算法导论 2.1 插入排序
- 插入排序-《算法导论》学习笔记一
- 算法导论(Introduction to Algorithms )— 第二章 算法入门 — 2.1 插入排序
- 算法导论2.1——插入排序
- 《算法导论》[第2章] 算法入门-[2.1] 插入排序
- 算法导论CLRS 2.1 插入排序
- 《算法导论》学习笔记——插入排序
- 算法导论 2.1-2 插入排序 (非递增)
- 《算法导论》学习笔记之Chapter 2-2.1,2.2,2.3插入排序,选择排序,归并排序
- 算法导论第二章2.1插入排序
- 算法导论-插入排序
- 《算法导论》学习笔记(4)——红黑树
- 算法导论—排序之插入排序
- 插入排序 来自《算法导论》
- 《算法导论》学习笔记——裴蜀等式及其扩展的证明
- 算法导论->算法基础->2.1插入排序 (从小到大)