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

第一部分 2.1插入排序法

Python 更新时间:发布时间: 百科书网 趣学号

        根据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.051e.com
本文地址:http://www.051e.com/it/1033246.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号