从零开始的蓝桥杯之路-07-插入排序

插入排序


一、概述

插入排序(Insertion Sort)是一种简单直观的排序算法,它的核心思想与我们在日常生活中整理扑克牌时的行为类似。这种算法适用于小规模数据的排序,或者部分已经有序的数据集。在这篇文章中,我们将详细探讨插入排序的原理、步骤以及它在不同场景下的表现。

二、插入排序的基本原理

插入排序的基本原理是将数组中的每个元素视为一张单独的扑克牌,然后将这些“牌”逐个插入到一个已经有序的“牌堆”中。在这个过程中,每个新插入的元素都会找到它在序列中的正确位置,使得每次插入后,序列仍然保持有序。

三、插入排序的步骤

插入排序的步骤可以细化为以下几个小步骤:
初始状态:将数组中的第一个元素视为已排序的部分,其余元素视为未排序的部分。
选择未排序部分的第一个元素:在未排序的部分中,选择第一个元素作为当前要插入的元素。
寻找插入位置:从已排序部分的最后一个元素开始,逐个与当前元素比较,直到找到一个元素小于或等于当前元素,或者到达已排序部分的起始位置。
插入元素:将当前元素插入到找到的位置,这通常涉及到将已排序部分中大于当前元素的元素向后移动一个位置。
重复过程:重复步骤2到步骤4,直到未排序部分的元素全部插入到已排序部分。

四、插入排序的特点

插入排序具有以下特点:
简单性:插入排序的算法实现简单,易于理解。
稳定性:插入排序是一种稳定的排序算法,即相同值的元素在排序后不会改变它们的相对顺序。
适应性:插入排序对于部分有序的数据集非常有效,其效率会随着数据集有序程度的提高而提高。

五、插入排序的性能分析

时间复杂度:插入排序的平均和最坏情况时间复杂度都是O(n^2),其中n是数组的长度。最好情况(即数组已经有序)的时间复杂度为O(n)。
空间复杂度:插入排序的空间复杂度为O(1),因为它是一种原地排序算法,不需要额外的存储空间。

六、插入排序的适用场景

插入排序适合以下场景:
数据量小:当数据量较小时,插入排序的性能可以与更复杂的排序算法相媲美。
部分有序:如果数据集已经部分有序,插入排序可以更快地完成排序。

结语:

插入排序虽然在大数据集上不如快速排序、归并排序等高级排序算法高效,但在特定场景下,它的简单性和稳定性使其成为一个有价值的选择。通过对插入排序的深入理解,我们不仅能够掌握一种实用的排序工具,还能更好地理解排序算法的基本原理和设计思想。在未来的编程实践中,插入排序的这些特性可能会在不经意间为我们带来便利。


n=int(input())
a=list(map(int,input().split()))

for i in range(1,n):
    value=a[i]
    insert_index=0
    for j in range(i-1,-1,-1):
        if a[j]>value:
            a[j+1]=a[j]
        else:
            insert_index=j+1
            break
    a[insert_index]=value

print(' '.join(map(str,a)))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值