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

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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值