我在一本书上看到了这个:
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
在上面的伪代码中,索引仅增加if list[index] > list[index + 1]
,因为index <-- index + 1
在IF循环内。
所以if list[index] > list[index + 1]
不是真的,那么下一行是:
swap( list[index], list[index + 1] )
swapped_pair = true
index <-- index + 1
不会被执行。这包括index <-- index + 1
这将导致如果前两个变量被正确排序,那么代码将不会检查接下来的两个变量,因为在这种情况下索引不会增加。
然后while index <= length - 1
将永远为真,因为索引永远不会增加,并且代码可能会停留在while index <= length - 1
循环。
索引不应该放在IF循环之外吗?
像这样:
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
这样if list[index] > list[index + 1]
然后它们被交换并交换对设置为true。如果if list[index] > list[index + 1]
不成立,则使用index <-- index + 1
将索引增加1。
由于while循环因为index <= length - 1
而继续,因此IF
的过程将一次又一次地重复,直到索引0和1为索引n-1和1。
我的伪代码版本是正确的吗?
答案 0 :(得分:0)
你是对的。内部while循环中的条件需要在每次迭代后有一种变化方式。