您的位置:首页 > 理论基础 > 数据结构算法

用Python 学习数据结构与算法 二、插入排序

2016-08-10 18:50 246 查看
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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 算法 插入排序