首页 > 编程问答 >我该怎么做才能更好地理解这一点?

我该怎么做才能更好地理解这一点?

时间:2024-07-31 16:21:23浏览次数:4  
标签:python

我不确定我的代码是如何工作的,我是初学者,没有太多经验

def insertion_sort(array):
    print(f'Initiales Array: {array}')
    for i in range(1, len(array)):
        
        temp = array[i]
        j = i
        while j > 0 and array[j - 1] > temp:
            array[j] = array[j - 1]
            j -= 1
        array[j] = temp
        print(f'Nach i={i}, Array: {array}')
    return array

data = [4, 1, 8, -3, 5, 7]
insertion_sort(data)

理解一段代码的最好方式,尤其是对于初学者来说,是将其可视化并一步一步地跟踪其执行。让我们分解一下你的插入排序代码:

插入排序:概述

插入排序算法的工作原理类似于你整理手中的扑克牌。你一次拿起一张牌,并在已经排序好的牌中找到它的正确位置,然后将其插入。

代码逐行分析

def insertion_sort(array):
    print(f'Initiales Array: {array}') 
    for i in range(1, len(array)):
        temp = array[i] 
        j = i
        while j > 0 and array[j - 1] > temp: 
            array[j] = array[j - 1]
            j -= 1
        array[j] = temp
        print(f'Nach i={i}, Array: {array}')
    return array

data = [4, 1, 8, -3, 5, 7]
insertion_sort(data)
  1. def insertion_sort(array): : 这行代码定义了一个名为 insertion_sort 的函数,该函数接收一个名为 array 的列表作为输入。 这是我们将对数据执行排序的函数。

  2. print(f'Initiales Array: {array}') : 这行代码在开始之前打印出初始数组 - 对了解算法是如何进行的很有帮助。

  3. for i in range(1, len(array)): : 这行代码启动了一个循环,该循环遍历数组。 i 的值将从索引 1(数组的第二个元素)到数组的最后一个元素。变量 i 表示“已排序子数组”中最后一个元素的索引。

  4. temp = array[i] : 这行代码将当前元素 array[i] 存储到名为 temp 的临时变量中。这是因为我们将对 array[i] 左侧的元素进行一些移位,并且我们需要记住 array[i] 的值以供以后插入。

  5. j = i : 我们创建一个名为 j 的新变量,并将其初始化为 i 的值。 j 用于在已排序子数组中向后迭代,以找到 temp 的正确位置。

  6. while j > 0 and array[j - 1] > temp: : 此循环在以下两个条件均为真时运行:

  7. j > 0 : 确保我们不会超出数组的左边界。
  8. array[j - 1] > temp : 检查已排序子数组中的元素 ( array[j - 1] ) 是否大于 temp 。 如果为真,则表示 temp 需要向左移动以找到其正确位置。

  9. array[j] = array[j - 1] : 如果前一个条件为真,则将较大的元素( array[j - 1] )向右移动一个位置以腾出空间。

  10. j -= 1 : 我们将 j 减 1 以便在已排序子数组中向左移动。

  11. array[j] = temp : 找到 temp 的正确位置后(即,它不再小于左侧的元素),我们将其插入到 j 索引处。

  12. print(f'Nach i={i}, Array: {array}') : 此行代码打印当前迭代后的数组。这对于可视化算法是如何一步一步对数组进行排序很有帮助。

  13. return array : 排序完成后,函数将返回已排序的数组。

示例执行

让我们用你的示例数据 [4, 1, 8, -3, 5, 7] 逐步执行代码:

迭代 1: i = 1 - temp = 1 - 将 1 4 进行比较。 1 小于 4 ,因此将 4 向右移动,并将 1 插入到其正确位置。 - 数组现在变为: [1, 4, 8, -3, 5, 7]

迭代 2: i = 2 - temp = 8 - 8 已经在其正确位置,因为它是已排序子数组 ( [1, 4] ) 中最大的元素。 - 数组保持不变: [1, 4, 8, -3, 5, 7]

迭代 3: i = 3 - temp = -3 - 将 -3 8 4 1 进行比较,并将这些元素向右移动,直到找到 -3 的正确位置。 - 数组现在变为: [-3, 1, 4, 8, 5, 7]

迭代 4、5 和 6 以类似的方式继续,将剩余的元素 5 7 插入到其正确位置,直到对整个数组进行排序。

调试技巧

  • 打印语句: 像代码中那样,在代码的各个点添加 print 语句,以查看变量的值和数组在每个步骤中的状态。
  • 调试器: 使用调试器可以让你逐步执行代码、设置断点并在每个步骤检查变量,从而更深入地了解代码的执行流程。

可视化

网上有许多资源可以提供插入排序的可视化表示。在 YouTube 或其他网站上搜索“插入排序可视化”,以找到有助于你理解该算法的动画。

请记住,练习是关键。尝试使用不同的输入数据集手动执行代码,并使用 print 语句或调试器来观察代码的行为。随着时间的推移,你将对插入排序以及其他排序算法有更深入的理解。

标签:python
From: 78815134

相关文章

  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-60 - 判断元素是否显示 - 下篇
    1.简介有些页面元素的生命周期如同流星一闪,昙花一现。我们也不知道这个元素在没在页面中出现过,为了捕获这一美好瞬间,让其成为永恒。我们就来判断元素是否显示出现过。在操作元素之前,可以先判断元素的状态。判断元素操作状态也可以用于断言。2.常用的元素判断方法2.1page对象调......
  • 是否有可能在Python中获取客户端计算机的位置
    我想编写一个程序,用python查找客户端计算机的位置。不过,我不介意它的格式如何。我到处尝试过一些东西,但老实说,我对这类事情了解不多,所以我真的不知道从哪里开始。|||我想简单地运行该程序,并将运行该程序的客户端计算机的位置写入控制台。Iwouldliketosimplyrunt......
  • Python:使用 Selenium WebDriver 无法在客户端打开浏览器
    我使用SeleniumWebDriver开发了一个应用程序来打开一些页面。它在本地工作得很好,但我还需要在客户端启动浏览器。我使用Apache2underUbuntu18部署了应用程序。driver=webdriver.Chrome(executable_path="chromedriver",chrome_options=ch......
  • Python:使用默认模块在python中读取excel
    我有Python2.6.6版本,但无法安装pandas、xlrd、xlwt等新模块。我想使用Python读取Excel。是否可以使用Python中存在的默认模块读取Excel。抱歉,不能使用Python2.6.6的默认模块读取Excel文件。Python没有内置的功能来处理Excel文件。使用外部库(如提......
  • 【Python】从0开始写脚本、Selenium详细教程、附源码案例(保姆篇)
    文章目录准备工作安装selenium配置浏览器驱动脚本测试什么是Selenium?Selenium功能示例(可直接拷贝执行)编写一个简单的Python脚本来使用Selenium打开一个网页,并获取网页的标题下面是一个示例,自动打开csdn并进行搜索Selenium使用Selenium元素定位文本输入、清除与提交......
  • Python控制台输出的华丽变身:色彩与风格的深度探索
    一、文章摘要本文深入探讨了Python标准输出中字体颜色的设置方法,特别是通过ANSI转义序列实现的文本样式控制。文章详细解析了ANSI转义序列的组成、各个颜色代码的含义,以及如何在Python中使用这些代码来改变终端输出的字体颜色、背景色、高光、加粗等样式。通过丰富的案例代码,......
  • 二十五、【机器学习】-【Python手搓3层神经网络】:从零构建深度学习模型的实战指南
    目录一、序章:为什么你需要掌握手搓神经网络二、基础篇:神经网络基础知识回顾三、实战配置:搭建3层神经网络的步骤与技巧(一)、__init__ 方法初始化神经网络(二)、train 方法实现了前向传播和反向传播(三)、query 方法(四)、全部代码四、总结一、序章:为什么你需要掌握手......
  • 在Python中将简单的字典导出到Excel文件中
    我是Python新手。我有一个简单的字典,其键和值如下dict1={"numberofstoragearrays":45,"numberofports":2390,......}我需要将它们放入Excel表中,如下numberofstoragearrays45numberofports2390我有一个非常大的字典。importpandasasp......
  • 将 python 脚本作为 AWS 胶水服务作业运行
    我有一个使用本地路径在本地运行的python脚本,但我需要复制此python脚本并将其作为AWS胶水服务作业运行并将输出保存在s3存储桶中。请帮助我逐步说明。将Python脚本作为AWSGlue作业运行的步骤如下:步骤1:修改的Python脚本以使其与Glue兼容......
  • Python - Decorating classes
    Whenwetalkaboutdecoratingclasses,wecaneitherdecorateindividualmethodsorwecancreateadecoratortodecoratethewholeclass.classMyClass:def__init__(self,a):self.a=a@timerdefmethod1(self,x,y):print......