有人可以解释这个插入排序伪代码吗?

时间:2015-09-08 19:05:02

标签: insert pseudocode insertion-sort

在研究“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”。

1 个答案:

答案 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

这是一个显示代码应该做什么的动画

Taken from Wikipedia

a link到关于插入排序的维基百科页面(其中包含动画和正确的代码)。