排序:三. 插入排序(将元素比较插入到前面的位置)

参考文章

时间复杂度O(n2),最好情况O(n),最坏情况O(n2),稳定。(同冒泡)

  • 是一种简单直观的排序算法。适用于量级小于千,或者若已知输入元素大致上按照顺序排列
  • 插入排序不适合对于数据量比较大的排序应用。

工作原理:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

算法描述如下:

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素(第二个元素)作为目标元素,在已经排序的元素序列中从后向前扫描
  3. 如果当前元素(扫描到的元素)大于目标元素,将当前元素与目标元素交换
  4. 重复步骤3,直到找到目标元素的位置(当前元素小余或等于目标元素)
  5. 重复步骤2-4

使用数组结构的话,没比较一次且满足插入条件的话就需要交换一次,如果使用链表结构(只用记录后继,但同时需要维护下标;记录后继和前驱,无需维护下标)的话,只需记录位置,最后插入即可,无需插入多次。

先对数组前两个元素进行排序,之后将第三个元素与前两个比较,按排序规则插入正确的位置,之后将第四个元素与前三个,比较插入正确的位置,以此类推直至最后一个元素

如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的数目。该算法可以认为是插入排序的一个变种,称为二分查找插入排序。

实现类为:InsertionSort
image.png

代码已上传 GitHub ,可以在 这里 找到

展开阅读全文
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值