ps:当初为了学习数据结构与算法,傻傻的买了本不适合入门的《算法导论》 真是坑坏我了,还好我啃了大部分内容,如今复习起来也算容易!没白啃!
我们先来聊聊插入算法,插入算法的主要是一次遍历的过程,在遍历过程中回查之前元素,寻找需要排序元素合适位置的一个过程。
上代码:
#coding=utf-8
def InsertionSort(array):
#获得数组长度
nLength = len(array)
#迭代数组,正查
#从下标1开始是因为需要与前一个数组元素进行比较
for j in range(1, nLength):
#获得要排序的元素
key = array[j]
#获得需比较的元素下标
i = j - 1
#比较前一个元素值
#倒查到首元素0
while i > -1 and array[i] > key:
#这里将>改为<,则会按降序排列
#前一个元素大于key则将其向后移
array[i + 1] = array[i]
#继续倒查
i = i - 1
#找到合适位置i后当值放入
array[i + 1] = key
A = [5, 2, 4, 6, 1, 3]
InsertionSort(A)
print(A)
输出结果:
[1, 2, 3, 4, 5, 6]
#coding=utf-8
#插入排序递归写法
def Core(Array, i, key):
index = i[0]
if index > -1 and Array[index] > key:
Array[index + 1] = Array[index]
i[0] = index - 1
Core(Array, i, key)
def Insert(Array, Pos = 1, MaxPos=None):
if MaxPos == None:
MaxPos = len(Array)
if Pos == MaxPos:
return
key = Array[Pos]
#使用list数组
#在Core递归内部修改后的i值在外面会被使用到
#而python的整数型传值是使用的值传,使用list则是引用,当然也可以封装一下i,这里想偷懒
i = [Pos - 1,]
Core(Array, i, key)
Array[i[0] + 1] = key
Insert(Array, Pos + 1, MaxPos)
A = [5, 2, 4, 6, 1, 3]
Insert(A)
print(A)
输出结果:
[1, 2, 3, 4, 5, 6]