还剩28页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
直接插入排序直接插入排序是一种简单直观的排序算法它将待排序的数组分成已排序和未排序两部分每次从未排序部分取出一个元素,将其插入到已排序部分的正确位置什么是直接插入排序排序算法插入过程直接插入排序是一种简单直观的排序算法,它将待排序元素逐个插排序过程类似于我们整理扑克牌的方式,将牌一张一张地插入到正入到已排序的子序列中确的位置直接插入排序的原理直接插入排序是一种简单的排序算法,类似于我们平时整理扑克牌它将数组分成两个部分已排序部分和未排序部分,每次将未排序部分的第一个元素插入到已排序部分的合适位置通过重复此过程,直到所有元素都插入到已排序部分,从而完成排序直接插入排序的实现步骤初始化1将第一个元素视为已排序部分比较2将未排序部分的第一个元素与已排序部分的元素进行比较插入3将未排序元素插入到已排序部分的正确位置重复4重复上述步骤,直到所有元素都被排序直接插入排序是一种简单直观的排序算法它将待排序的元素逐个插入到已排序的部分中,直到所有元素都排序完成直接插入排序的时间复杂度直接插入排序的时间复杂度取决于输入数据的排序情况在最坏情况下,输入数据是逆序排列的,时间复杂度为On^2在最好情况下,输入数据已经排序,时间复杂度为On在平均情况下,时间复杂度为On^2直接插入排序的最佳情况分析直接插入排序在最佳情况下,输入数组已经是排序好的,此时无需进行任何交换操作1比较次数n-1次0交换次数0次n时间复杂度On直接插入排序的平均情况分析平均情况时间复杂度基本有序On随机排列On^2直接插入排序的平均时间复杂度为On^2,这是因为在平均情况下,每个元素都需要与前面已经排好序的元素进行比较并插入到合适的位置直接插入排序的最坏情况分析直接插入排序的最坏情况发生在待排序数组本身已经是逆序排列的情况下例如,数组[5,4,3,2,1]就是一个逆序排列的数组N N比较移动需要进行N-1次比较需要进行NN-1/2次移动在这种情况下,每个元素都需要和前面的所有元素进行比较,并进行移动,导致时间复杂度达到On^2直接插入排序的稳定性稳定性定义直接插入排序的稳定性稳定排序算法是指,对于排序前具有相同值的元素,排序后其相直接插入排序是一种稳定的排序算法当待排序元素相同时,插对位置保持不变入操作会将相同元素依次插入到目标位置,不会改变其相对位置直接插入排序的优缺点优点缺点直接插入排序是一种简单易懂的直接插入排序的时间复杂度在最排序算法,实现起来比较容易坏情况下为On^2,对于规模较对于规模较小的数据集合,它的大的数据集合,效率比较低对效率很高此外,直接插入排序于几乎有序的数组,直接插入排是一种稳定的排序算法,可以保序表现较好,但对于随机排列的持相等元素的原始相对顺序数组,其效率会受到影响直接插入排序的应用场景数据排序查找直接插入排序适用于小规模数据集排序,特别直接插入排序可以用于实现二分查找等搜索算是数据已部分排序的情况法,提高搜索效率游戏开发网络协议在一些游戏开发中,例如牌类游戏,直接插入在网络协议中,直接插入排序可以用于数据包排序可以用于对玩家手中的牌进行排序的排序,例如在数据包排序和传输过程中示例数组1[5,2,4,6,1,3]本例展示了直接插入排序算法在数组[5,2,4,6,1,3]上的执行过程该算法通过逐步将每个元素插入到已排序的子数组中,最终完成整个数组的排序第一次插入初始数组1数组为[5,2,4,6,1,3],索引从0开始比较第一个元素2第一个元素为5,无需比较,因为它是第一个元素插入第二个元素3第二个元素为2,需要与第一个元素5比较第二次插入比较将当前元素2与已排序部分的最后一个元素5进行比较交换由于2小于5,所以将2与5交换位置继续比较将2与已排序部分的第二个元素4比较,由于2小于4,继续交换最终位置最后,2被插入到已排序部分的第一个位置,完成第二次插入第三次插入41与前一个元素比较62大于4,无需交换23小于4,交换位置45此时数组为[2,5,4,6,1,3]插入元素4,比较4与5,6,因为4大于2,所以4插入到第3个位置第四次插入11将6插入到已排序的数组中22从后向前比较33找到6的插入位置44将元素后移将6插入到已排序的数组中,从后向前比较,找到6的插入位置将大于6的元素后移,并将6插入到空出的位置第五次插入比较将1与当前已排序序列中的元素进行比较移动由于1比3小,因此将3和4分别向后移动一位插入将1插入到空出的位置,完成第五次插入第六次插入比较1将6与已排序数组中大于或等于6的元素比较,找到6的插入位置移动2将大于6的元素向右移动一位,为6腾出空间插入3将6插入到找到的位置,完成第六次插入操作排序结果排序结果排序动画经过六次插入操作,数组中的元素已按升序排列,最终结果为[1,2,动画展示了直接插入排序的整个过程,帮助理解排序步骤和结果3,4,5,6]示例数组2[8,3,1,2,7,5,6,4]该示例中包含了八个数字,我们需要使用直接插入排序算法对它们进行排序这将展示如何将每个数字依次插入到已排序的子数组中,最终得到一个完整的排序数组第一次插入比较1将第一个元素与第二个元素比较交换2如果第一个元素大于第二个元素,则交换两个元素移动3将第二个元素插入到第一个元素的位置插入排序的第一步是最简单的,只需将第一个元素与第二个元素比较,如果第一个元素大于第二个元素,则交换两个元素然后将第二个元素插入到第一个元素的位置第二次插入比较将3与已排序部分的最后一个元素8进行比较由于3小于8,因此需要将8向右移动一个位置将3插入到当前位置第三次插入比较将当前元素与已排序部分的最后一个元素比较1移动2如果当前元素小于已排序部分的最后一个元素,则将最后一个元素向后移动插入3将当前元素插入到已排序部分的正确位置第三次插入时,将元素1与已排序部分的最后一个元素3进行比较,发现1小于3,因此将3向后移动,并将1插入到已排序部分的正确位置第四次插入比较1将2与1比较交换2交换2和1的位置插入3将2插入到正确的位置结果4数组变为[1,2,3,7,5,6,4,8]第四次插入,将数字2插入到已排序的序列中首先将2与1比较,发现2大于1,因此不需要交换然后将2与3比较,发现2小于3,因此将2插入到3之前的位置最终数组变为[1,2,3,7,5,6,4,8]第五次插入步骤比较11比较待插入元素7和已排序序列中的元素,从右向左逐个比较步骤移动22由于7大于5,因此将5向右移动一位,为7腾出位置步骤插入33将7插入到空位,完成第五次插入操作第六次插入比较1将5与6进行比较交换2交换5和6的位置插入3将5插入到正确位置将5与6进行比较,发现5比6小,交换它们的位置然后将5插入到排序后的数组中,此时5的位置为数组索引5第七次插入已排序部分1数组的前六个元素已经排序完成,为[1,2,3,4,5,6]待插入元素2当前待插入元素为7,位于数组的第7个位置比较与插入3将7与已排序部分的最后一个元素6进行比较,7大于6,因此直接将7插入到6的右侧第八次插入比较1将4与已排序部分的最大值5进行比较交换2因为4小于5,所以交换位置插入3将4插入到排序部分的正确位置现在,已排序部分为[1,2,3,4,5,6,7,8]排序结果经过八次插入操作,数组已经排好序排序后的数组为[1,2,3,4,5,6,7,8]该结果表明直接插入排序成功将原始数组排序为升序排列总结与展望直接插入排序其他排序算法12易于理解和实现,但对于大型数据集效学习更复杂但效率更高的排序算法,例率较低如快速排序、归并排序实际应用场景3选择适合数据规模和复杂度的排序算法,并根据实际需求进行优化。
个人认证
优秀文档
获得点赞 0