这个j=length-1是为什么?data[j+1]=data[j]又是什么意思

img

看题意,length代表的是元素数量,一共5个,这5个元素的索引是0-4;数组的长度是超过元素数量的,否则最后一个元素移不到他后面的位置。
data[j+1]=data[j]意思是,把索引为 j 的元素移到索引 j+1的位置;
看题意应该是在索引 = 3的地方插入一个数75,那么55,和90就要向后移一位;

for(int j = length - 1; j >= i; j--)//这个循环就是移位置的
  data[j+1]=data[j];  //这里要注意,循环体就这一行,所以没有大括号,

第一次循环 j 的初始值为5-1=4,就是原素90的位置,data[j+1] =data[j];就是把data[4]的元素放到data[5]的位置,就是data[4]向后移了一位
第二次循环 j = 4-- 所以j = 3 data[j+1] =data[j];就是把data[3]的元素放到data[4]的位置(此时原data[4]已经到data[5]了,所以不用担心覆盖)就是data[3]向后移了一位
此时j = 2,不符循环条件,循环结束.
data[i] = a意思是把新原素放到 data[3]的位置;
新增了一个原素,所以length多了一个;这是length++的意思,
最后一行return true;表示插入成功。

下标从0开始,如果你长度是5,下标最多是4;
一个“=”号是赋值,你这里描述的是把下标为j的数据赋值给下标为第j+1

length-1,是因为有 j+1 避免数组越界, 而 data[j+1] = data[j] 是将data[j]数据后移一位 ,循环的作用就是将i到length范围的数据往后移动一位然后将a插入到i位置。