循环移位算法就是数列中的每一个数的位置(索引)都向后移动一个数,最后一个数会移动到数列最前面,比如数列1,2,3,4,移动一次后会变成4,1,2,3,再次移动会会变成3,4,1,2,详细如下:
let testArr:Array<number> = [1,2,3,4];
//移动的过程中,最后一个会被移掉,先保存一下
let theLastIndex:number = testArr.length - 1;//3
let theLastOne:number = testArr[theLastIndex];
//从元素的最后一个位置开始,直到第一个位置,注意是第一个位置,索引为1的位置,实际上就是第二个元素2, 为什么到第二个为止呢,因为第一个(索引为0)的位置就是最后一个元素,被移掉的元素,该元素不用移了,直接赋值即可,这样在某种程度上减少了时间复杂度和空间复杂度
for(let i:number = theLastIndex;i>0;i--){
testArr[i] = testArr[i-1];//具体移动
}
testArr[0] = theLastOne;//将被移除的那个元素存到第一个位置
第一次循环:i=3,testArr=[1,2,3,3],4被干掉了
第二次循环:i=2,testArr=[1,2,2,3],
第三次循环:i=1,testArr=[1,1,2,3],
最后把被干掉的提前存储的4赋给第0个元素即testArr=[4,1,2,3]。