数据结构与算法-插入排序
创始人
2024-11-24 13:05:54
0

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!

文章目录

      • 引言
      • 一、插入排序的基本思想
      • 二、插入排序的步骤
      • 三、插入排序的实现
        • 1. 示例数组
        • 2. 伪代码
        • 3. Python 实现
      • 四、插入排序的时间复杂度分析
      • 五、插入排序的空间复杂度分析
      • 六、总结

引言

插入排序是一种简单直观的排序算法,它的工作原理类似于人们整理手中的一叠卡片。该算法通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常使用in-place排序(即只需用到O(1)的额外空间),其时间复杂度为O(n^2),其中n是待排序数组的长度。

一、插入排序的基本思想

插入排序的基本思想是:

  1. 将数组分为已排序和未排序两个部分。
  2. 初始时,已排序部分只包含数组的第一个元素,其余元素视为未排序部分。
  3. 从未排序部分取出一个元素,与已排序部分的元素依次比较,找到合适的位置插入。
  4. 重复上述步骤,直到所有元素都被插入到已排序部分。

二、插入排序的步骤

假设有一个数组 arr 需要进行排序。

  1. 初始化:将第一个元素视为已排序部分,剩余元素视为未排序部分。
  2. 遍历:从未排序部分选取第一个元素 arr[j]
  3. 比较与交换:将 arr[j] 与已排序部分的元素 arr[i] 进行比较,如果 arr[j] 更小,则交换位置,否则继续与前面的元素比较。
  4. 重复:重复上述步骤,直到 arr[j] 被正确插入到已排序部分。
  5. 完成:当所有元素都被正确插入到已排序部分时,排序完成。

在这里插入图片描述

三、插入排序的实现

接下来,我们将通过一个示例来详细了解插入排序的实现步骤。

1. 示例数组

考虑一个整数数组 arr = [5, 2, 4, 6, 1, 3]

2. 伪代码

以下是插入排序的基本伪代码:

for i = 1 to n-1 do     key = arr[i]     j = i - 1     while j >= 0 and arr[j] > key do         arr[j+1] = arr[j]         j = j - 1     end while     arr[j+1] = key end for 
3. Python 实现

下面是一个使用Python编写的插入排序算法的具体实现:

def insertion_sort(arr):     # 获取数组的长度     n = len(arr)      # 从第二个元素开始遍历数组     for i in range(1, n):         # 保存当前元素,它将被插入到已排序的部分         key = arr[i]          # 初始化j为当前元素的前一个位置         j = i - 1          # 将大于key的元素向右移动一位         while j >= 0 and arr[j] > key:             arr[j + 1] = arr[j]             j -= 1          # 将key插入到正确的位置         arr[j + 1] = key      return arr  # 示例数组 arr = [5, 2, 4, 6, 1, 3] # 调用函数 sorted_arr = insertion_sort(arr) print(sorted_arr) 

四、插入排序的时间复杂度分析

  • 最好情况:当输入数组已经是排序好的时候,算法的时间复杂度为O(n),因为不需要进行任何交换。
  • 最坏情况:当输入数组是逆序的时候,算法的时间复杂度为O(n^2),因为每插入一个元素都需要与之前的所有元素比较。
  • 平均情况:插入排序的平均时间复杂度也是O(n^2)。

五、插入排序的空间复杂度分析

  • 插入排序是原地排序算法,只需要常数级别的额外空间,因此其空间复杂度为O(1)。

六、总结

插入排序是一种简单有效的排序方法,尤其适用于小规模数组或者基本有序的数组。虽然它的平均和最坏时间复杂度较高,但在实际应用中,特别是当数据量不大时,它的性能是可以接受的。此外,插入排序还可以作为其他更复杂的排序算法的基础组成部分,比如希尔排序。


喜欢博主的同学,请给博主一丢丢打赏吧↓↓↓您的支持是我不断创作的最大动力哟!感谢您的支持哦😘😘😘
打赏下吧

💝💝💝如有需要请大家订阅我的专栏【数据结构与算法】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!

❤️❤️❤️觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

相关内容

热门资讯

来一盘!大众互娱辅助器(透明挂... 来一盘!大众互娱辅助器(透明挂)外挂透明挂辅助app(2024已更新)(哔哩哔哩)1、玩家可以在大众...
玩家必看科普!闽南旺旺麻将(好... 玩家必看科普!闽南旺旺麻将(好像真的是有挂)详细辅助挂教程1、上手简单,内置详细流程视频教学,新手小...
9分钟了解!开心泉州麻将挂是真... 9分钟了解!开心泉州麻将挂是真的吗,雀友游戏一贯有挂,曝光教程(有挂方法);1、9分钟了解!开心泉州...
七分钟详情!优乐麻将有没有挂,... 七分钟详情!优乐麻将有没有挂,越乡游双扣辅助工具(果然有辅助挂)1、该软件可以轻松地帮助玩家将越乡游...
一分钟了解!!广东雀神智能辅助... 一分钟了解!!广东雀神智能辅助器下载(透视)外挂透明挂辅助挂(2023已更新)(哔哩哔哩)1、每一步...
玩家实测!老友汇软件神器(一贯... 玩家实测!老友汇软件神器(一贯有挂)详细透视辅助教程老友汇软件神器是一种具有地方特色的麻将游戏,要想...
8分钟辅助!星悦麻将有挂吗20... 8分钟辅助!星悦麻将有挂吗2020,开心十三张辅助挂本来真的是有挂,黑科技教程(有挂攻略)星悦麻将有...
5分钟黑科技!闲来麻将,天天福... 5分钟黑科技!闲来麻将,天天福建十三张吗(果然有挂)1.天天福建十三张吗 ai辅助创建新账号,点击进...
总算了解!!微信跑得快辅助神器... 总算了解!!微信跑得快辅助神器(透明挂)外挂透明挂辅助软件(2020已更新)(哔哩哔哩);1、在微信...
揭秘!白金岛跑得快外 挂(确实... 揭秘!白金岛跑得快外 挂(确实真的有挂)详细透视教程;1、任何白金岛跑得快外 挂ai辅助神器的玩家都...