插入排序是一种简单直观的排序算法,其工作原理类似于打牌时整理手牌的过程:每次从待排序序列中取出一个元素,将其插入到已排序序列中的正确位置,使得已排序序列始终保持有序。
给定一个包含 n 个整数的数组,请模拟插入排序的完整过程,并按照指定格式输出每一步的序列状态。
3 1 5 4 2 为例)3:直接放入,序列变为 3。1:将 1 与已排序序列 3 比较,3 > 1,将 3 后移一位,序列变为 3 3,然后将 1 放入空位,得到 1 3。5:5 大于 3,无需移动,直接追加,得到 1 3 5。4:从后往前比较,5 > 4,将 5 后移,序列变为 1 3 5 5;然后 3 <= 4,停止,将 4 放入空位,得到 1 3 4 5。2:依次将 5, 4, 3 后移,最后将 2 插入,得到 1 2 3 4 5。你需要输出每一步的序列变化,格式详见下文。
输出共分为 n 个部分,每个部分对应一个元素的插入过程,格式如下:
Insert element[i]: 开头,其中 i 从 1 开始。Init、Move back、Final)前必须缩进两个空格(即行首输出两个空格)。Init: 后跟当前已排序序列(即前 ( i-1 ) 个元素已排序后的序列)加上第 ( i ) 个元素(位于末尾)所组成的序列。Move back: 后跟移动后的完整序列(包含当前元素的占位,即重复的最后一个元素)。重复直到找到正确位置。Final: 后跟插入完成后的完整序列。Init 和 Final 两行(格式仍需要缩进两个空格)。5 3 1 5 4 2
Insert element[1]: Init:3 Final:3 Insert element[2]: Init:3 1 Move back:3 3 Final:1 3 Insert element[3]: Init:1 3 5 Final:1 3 5 Insert element[4]: Init:1 3 5 4 Move back:1 3 5 5 Final:1 3 4 5 Insert element[5]: Init:1 3 4 5 2 Move back:1 3 4 5 5 Move back:1 3 4 4 5 Move back:1 3 3 4 5 Final:1 2 3 4 5
蓝桥杯