Q值。描述一个算法,该算法将整数x在适当的位置插入到按顺序递增的整数列表a_1,a_2,...,a_n中。
一个。
procedure insert(x,a_1,a_2,...,a_n :integers)
{the list is in order: a_1<=a_2<=...<=a_n}
a_(n+1) := x+1
i :=1
while x>a_i
i :=i+1
for j:=0 to n-i
a_(n-j+1) := a_(n-j)
a_i=x
{x has been inserted into correct position}
我的问题。为什么a_(n+1) := x+1
?如果初始值为i=n
,那么j=0 to -1
?
我会排除j=-1
吗?
抱歉说不好请解释这个算法
答案 0 :(得分:1)
为什么a_(n + 1):= x + 1?
这是sentinel node方法。
使用此stop元素,可以使用相同的方法将x插入列表的任何位置。否则,必须查找列表是否已完成,并在末尾附加x以特殊代码
如果初始值i = n则j = 0到-1?
暗示for j:=0 to -1
的运算符未被执行(某些语言具有特殊类型的for
循环用于反向,如Pascal中的for ..downto
或某些step
参数其他)