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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Cpp2088671660/article/details/52175234

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]

猜你喜欢

转载自blog.csdn.net/Cpp2088671660/article/details/52175234
今日推荐