将当前元素插入到已有序列的数组中,冒泡。举例说明:
数据内容是 1 4 3 2 5;
for i = 1-5;
i=1时 当前元素是1;无有序数组,1插入数组,形成长度为1的有序数组。
i=2时 当前元素是4,有序数组是 1,4插入到有序数组的最后,形成1 4,4>1,位置不变,结束本次操作
i=3时 当前元素是3,有序数组是 1 4,3插入到有序数组的最后,形成 1 4 3,3<4,3和4交换位置,形成1 3 4,3>1位置不变,结束本次操作。i=4时 当前元素是2,有序数组是 1 3 4, 2插入到有序数组的最后,形成 1 3 4 2,2<4,交换2和4的位置,形成1 3 2 4,2<3交换2和3的位置,形成1 2 3 4,2>1,位置不变,结束本次操作。
i=5时 当前元素是5 有序数组是1 2 3 4,5插入到有序数组的最后,形成1 2 3 4 5,5>4,位置不变,结束本次操作。
总结一下就是,将arr[i]插入到有序数组的最后,然后和前边的元素比较,如果小于前一个元素,那么交换位置,直到大于前一个元素,结束操作。
虽然在结构上,和冒泡排序多少有点类似,但在计算的过程中,发现在形成新的有序数组的时候,当前元素找到新的有序数组的位置的时候,能减少后续的操作。
假设已有数组恰好是一个有序数组,那么在生成新的数组的时候,只需要做一次操作。这是,插入排序的时间复杂度就是O(n)。反之,假设已有数组是一个反序数组,那么在生成新的数组的时候,都需要当前元素和有序数组的每个元素做比较,这样就跟冒泡排序没有差别。
|