网站后台选择杭州简单网技术有限公司
2026/2/13 19:39:31 网站建设 项目流程
网站后台选择,杭州简单网技术有限公司,seo发包排名软件,网站建设和优化排名一、直接插入排序 算法逻辑#xff1a;通过将待排序元素逐个插入到已排序序列的合适位置来实现排序。代码中通常使用一个临时变量 tmp 暂存当前待插入元素#xff0c;然后从后向前在已排序部分比较并移动元素#xff0c;找到插入位置后完成插入。 性能分析#xff1a; 最好…一、直接插入排序算法逻辑通过将待排序元素逐个插入到已排序序列的合适位置来实现排序。代码中通常使用一个临时变量tmp暂存当前待插入元素然后从后向前在已排序部分比较并移动元素找到插入位置后完成插入。性能分析最好情况原序列已有序比较次数$ n - 1 $移动次数0最坏情况原序列逆序比较次数$ \sum_{i1}^{n-1} i \frac{n(n-1)}{2} $移动次数$ \sum_{i2}^{n} (i1) \frac{(n3)(n-2)}{2} $平均情况比较和移动次数均约为 $ \frac{n^2}{4} $时间复杂度$ O(n^2) $空间复杂度$ O(1) $仅需一个辅助变量稳定性稳定相同元素不会改变相对顺序definsertion_sort(arr):foriinrange(1,len(arr)):tmparr[i]# 暂存待插入元素ji-1# 向前查找插入位置whilej0andarr[j]tmp:arr[j1]arr[j]j-1arr[j1]tmp# 插入正确位置returnarr二、冒泡排序算法逻辑通过相邻元素两两比较若逆序则交换每一趟遍历将最大元素“沉”到最后。最多进行 $ n-1 $ 趟若某趟未发生交换则说明序列已有序可提前结束。性能特点最好情况序列已有序比较次数$ n - 1 $交换次数0可通过标志位优化提前退出最坏情况完全逆序比较次数$ \frac{n(n-1)}{2} $交换次数$ \frac{n(n-1)}{2} $时间复杂度$ O(n^2) $空间复杂度$ O(1) $稳定性稳定defbubble_sort(arr):nlen(arr)foriinrange(n-1):swappedFalseforjinrange(n-1-i):ifarr[j]arr[j1]:arr[j],arr[j1]arr[j1],arr[j]swappedTrueifnotswapped:# 无交换说明已有序breakreturnarr这类排序算法属于简单排序算法适用于小规模数据或教学场景是数据结构与算法的基础内容广泛应用于编程考试、面试题及软件设计基础知识体系中。在实际应用中直接插入排序的效率通常高于冒泡排序主要原因如下1.比较和交换次数更少插入排序每趟只需将当前元素插入到已排序部分的正确位置过程中只进行必要的比较和移动不涉及频繁交换。在最好情况下已有序仅需 $ n-1 $ 次比较0 次移动。平均情况下比较和移动次数约为 $ \frac{n^2}{4} $。冒泡排序每趟都要对相邻元素两两比较并在逆序时进行交换。即使数据已经有序若未加优化仍会执行全部趟数虽然可通过标志位优化提前退出但最坏情况下的交换次数高达 $ \frac{n(n-1)}{2} $远高于插入排序的数据移动量。⚠️ 注意插入排序中的“移动”是赋值操作通过tmp和后移实现而冒泡排序中的“交换”是三个赋值完成一次 swap代价更高。2.实际运行性能更优插入排序具有更好的缓存局部性访问连续内存适合现代计算机架构。更少的写操作使其在嵌入式系统或写入成本高的存储中更具优势。3.适应性强插入排序对接近有序的数据表现极好时间复杂度趋近于 $ O(n) $。冒泡排序即使经过优化在部分有序情况下也难以达到同样响应速度。4.代码执行效率对比示例对于相同输入[5, 1, 2, 3, 4]插入排序只需将5向右移动一位其余元素前移一格整体移动较少。冒泡排序需要多次交换才能将5“冒泡”到最后中间产生大量冗余交换。✅结论虽然两者时间复杂度均为 $ O(n^2) $但插入排序的实际执行效率显著优于冒泡排序。因此在简单排序算法中插入排序是更推荐使用的方案尤其适用于小规模或基本有序的数据集。# 示例插入排序比冒泡排序更快地处理接近有序数据arr1[2,1,3,4,5]print(原数组:,arr1)print(插入排序结果:,insertion_sort(arr1.copy()))print(冒泡排序结果:,bubble_sort(arr1.copy()))

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询