【发布时间】:2015-09-17 22:31:57
【问题描述】:
我从维基百科得到这个伪代码:
procedure bubbleSort( A : list of sortable items )
n = length(A)
repeat
swapped = false
for i = 1 to n-1 inclusive do
/* if this pair is out of order */
if A[i-1] > A[i] then
/* swap them and remember something changed */
swap( A[i-1], A[i] )
swapped = true
end if
end for
until not swapped
end procedure
这是来自a book(命名为计算机科学原理)
BubbleSort( list )
length <-- lenght of list
do {
swapped_pair <-- false
index <-- 1
while index <= length - 1 {
if list[index] > list[index + 1] {
swap( list[index], list[index + 1] )
swapped_pair = true
index <-- index + 1
}
}
} while( swapped = true )
end
我不知道哪个伪代码更好。
我不明白的部分是 swapped_pair
在第 4 行,写成 swapped=false 或 swapped_pair <-- false。
为什么一开始就设置为 false?如果不设置为 false 会怎样?
最后几行,在维基百科上是这样写的:
end if
end for
until not swapped
end procedure
在书中的伪代码上写着:
while( swapped = true )
最后几行是什么意思?
【问题讨论】:
-
有两个循环。您从哪里知道它只通过列表一次?
-
另外,听起来您很难理解伪代码的语法,而不是算法。我建议你回顾一下书中介绍语法的章节。
-
对不起,我真的没有这个想法(我会编辑它)。但我只是不明白最后的陈述是什么意思。如果没有最后的陈述,如果我没记错的话,那将通过列表一次。
-
我知道冒泡排序算法,但我不明白它是如何在这些伪代码上执行的。
-
书中的伪代码不是以
while( swapped = true )结尾,而是以} } } while( swapped = true ) end结尾,所以它们是一样的。在书中,他们使用}来关闭if 或循环,end来结束函数,但在维基百科中,他们使用end if和end for和end procedure来完成同样的事情——所以实际上它是完全一样的对同一件事用不同的词。而<--真的只是=所以swapped=false和swapped_pair <-- false也是一样的。