栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

第一部分 2.1插入排序法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第一部分 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. 其他大佬代码

nullhttps://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)之间的关系,并判断是否需要交换。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1033246.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号