算法
(1)整个数组分为有序和无序两个状态,右边无序,左边有序,初始左边没有元素;
(2)从index=1
开始,左边只有index=0
一个元素,先把index=1位置的元素值存储下来给tmp;
(3)比较左侧的元素是否比tmp
大,如果大,则tmp
最终要移到左边去。由于tmp
值已经存下来了,所以先不用管它。
(4)此时需要处理的是移动左边元素,空出位置,one by one, 先移动第一个,然后执行j--
,在比较此时的arr[j]与tmp
的大小,如果仍旧大,则继续移动,然后j--
,比较下一个arr[j]
;反之如果arr[j]<= tmp
,则将tmp插入进来,即arr[j+1] = tmp;
,一直到结束。
(5)最好情况的时间复杂度是O(n),最坏的情况为O(n^2),看最坏的情况。
代码
public int