在研究“Schaum的计算机科学原理概论”第2章时,我得到了这个伪代码:
Insertion_Sort(num_list)
length <-- length of num_list
number_index <-- 2
while{number_index <= length} {
newNum <-- num_list[number_index]
sorted_index <-- number_index - 1
while newNum < num_list[sorted_index] AND sorted_index > 0 {
num_list[sorted_index + 1] <-- num_list[sorted_index]
sorted_index <-- sorted_index - 1
}
num_list[sorted_index + 1] = newNum
}
end
number_index不会卡在2吗?
代码number_index <-- number_index + 1
之后不应该有num_list[sorted_index + 1] = newNum
吗?
是否有错误,或者只是我不理解伪代码?
有人可以解释这个伪代码是如何工作的吗?
注意:我不是程序员(非常新),到目前为止我只研究过Charles Petzold的“CODE”。
答案 0 :(得分:2)
你是对的,伪代码写错了,因为number_index
永远不会递增,所以代码无限循环。
在代码的倒数第二行中,代码在语法上是不正确的,使用=
符号来表示赋值,而不是已经建立的<--
符号。名称也不完全准确(newNum
实际上不是新号码,只是存储的号码。)
以下是使用给定语法的代码。
Insertion_Sort(num_list)
length <-- length of num_list
number_index <-- 2
while{number_index <= length} {
newNum <-- num_list[number_index]
sorted_index <-- number_index - 1
while newNum < num_list[sorted_index] AND sorted_index + 1 > 0 {
num_list[sorted_index + 1] <-- num_list[sorted_index]
sorted_index <-- sorted_index - 1
}
num_list[sorted_index + 1] <-- newNum
number_index <-- number_index + 1
}
end
这是一个显示代码应该做什么的动画
和a link到关于插入排序的维基百科页面(其中包含动画和正确的代码)。