往数列插入任意位置数的算法
这里仅以d=1,a1=1,s=100的情况
1...100
如果要插入3 39 49 50这几位,而相应的后续项则应当加上d,以便仍然形成新的数列。
只要求加一次的做法:首先得到要插入的数字个数m=4, 然后以插入数中最大数50开始,后续所有项(含本项)加上m, 插入数中第二大的到最大数之间的项加上m=3,依次类推
原数列1...100
新数列 1 2 3 4..38 39 40...48 49 50 51 52 53 54....100 101 102 103 104
越是后面的项(以插入数之后为基准),加得越多。
加四
原来的50变成54
加三
原来的49变成52
加二
原来的39变成41
加一
原来的3变成4
抽象一下。
插入a b c三项(用k表示插入项数,则有k=3),0<a<b<c,如果用i来遍历数列,那么会有
if i>=c; then i=i+k
if i<c && i>=b; then i=i+k-1
if i<b && i>=c;then i=i+k-2
写成代码,可以这样来:项作为位置参数,位置参数个数作为k,每换一次参数k就减1,直至遍历所有位置参数。