You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含K个逆序对的n元素数组的插入排序时间复杂度分析

插入排序在含K个逆序对数组中的时间复杂度分析

插入排序的时间复杂度直接和数组中的逆序对数量K强相关,结论是时间复杂度为O(n + K),以下是具体分析:

核心逻辑关联

插入排序的核心是维护一个逐步扩大的有序子数组:遍历到第j个元素时,将其与前面已排序的A[0..j-1]逐个比较,找到合适的插入位置,并将所有比它大的元素后移一位。

对于每个元素A[j],前面有m_j个元素比它大——这m_j个元素恰好和A[j]形成了m_j个逆序对。处理A[j]时:

  • 移动元素的次数等于m_j(需要把这m_j个元素都后移一位);
  • 比较次数介于m_j到m_j+1之间(找到插入点时,要么比完所有m_j个更大的元素,要么在中途遇到更小的元素停止)。

所有元素的m_j之和就是数组的总逆序对数量K,因此:

  • 总移动次数 = K;
  • 总比较次数 = K + O(n)(每个元素最多多1次额外比较,总和不超过K + n)。

两者相加的总操作次数为O(n + K),这就是插入排序的时间复杂度。

典型场景验证

  • 最好情况(K=0,数组有序):每个元素仅需1次比较,无需移动,总操作次数为O(n),符合O(n+K);
  • 最坏情况(K=n(n-1)/2,数组完全逆序):每个元素的m_j等于其前面的元素总数,总操作次数为O(n²),而n(n-1)/2是O(n²),因此O(n+K)=O(n²),与最坏情况复杂度一致;
  • K=1的情况:仅需额外1次移动和最多2次比较,总操作次数为O(n),符合预期。

分析建议

  1. 锚定逆序对与操作的对应关系:每个逆序对(i,j)(i<j且A[i]>A[j]),都会在处理A[j]时对应一次移动操作和至少一次比较操作,直接把K和排序的工作量挂钩;
  2. 模拟小例子强化理解:比如手动模拟[3,1,2](K=2)的插入排序过程,统计比较和移动次数,验证总操作次数与n+K的线性关系;
  3. 对比极端情况:通过最好、最坏情况的复杂度反推一般情况,确认O(n+K)的合理性——当K远小于n²时,排序效率接近O(n),越接近有序越快。

内容的提问来源于stack exchange,提问作者FNB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:10:09