第一部分 2.1插入排序法

        根据Thomas H.Cormen等同学编写的经典书籍《算法》中的第一部分基础算法,依照书中的伪代码,并参考其他大佬们以实现的排序算法,利用python来实现并记录在本博客中。

1.参考原书代码

 

# -*- coding: utf-8 -*-
"""
Spyder Editor
Contetnt: 算法第三版 第一部分 第二章节算法基础 插入排序法
          算法的核心是比较当前数和前一个数的关系,如果当前数大于前数,则跳过,反之,调换两数位置
          随后,再比较换位之后的的前数,和其前数的大小,执行循环遍历
This is a temporary script file.
"""

#构建插入排序函数
def InsertionSort(arr):
    j = 1 #当前数从2开始,保证有前一位数可以与值比较(也即存在j-1)
    for j in range(len(arr)): #在数组中遍历
        key = arr[j] #将当前数赋予临时变量key
        i = j-1 #获取前一位数
        #利用while()进行条件判断变量,前一位是否大于后一位
        while( (i >= 0) and (arr[i] >  key )): 
            arr[i+1] = arr[i] #如果大于,则前数替换当前数
            i =i - 1   #i-1很重要,与i>=0组合判断 前两位数和当前数的关系,并执行交换
        arr[i+1] = key #最后最开始的当前数key,放在变量后的位置
    return arr

#给定数组
arr = [1, 5, 4, 7, 9, 3, 21, 6]

#打印
print(InsertionSort(arr))

2. 其他大佬代码

nullicon-default.png?t=M666https://blog.csdn.net/superjunjin/article/details/104108494

def InsertionSort1(arr):
    j = 1
    for j in range(len(arr)):
       i=j #这里很关键,将当前数索引赋予i, i-1可得到前一数值,进而进行比较
       while(i>0 and arr[i-1]>arr[i]):
            arr[i], arr[i-1] = arr[i-1], arr[i] #直接交换两数
            i -= 1
    return arr

3.总结

        插入排序法的核心在于判断当前数(i)和前数(i-1)的关系,如果前数待遇当前数,则交换俩数值。如果此时i-1不等于0,意味着i-1前还有数值,需要循环遍历前数(i-1)-1与当前数(i-1)之间的关系,并判断是否需要交换。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值