这个BubbleSort伪代码有错误吗? (或者我错了)?

时间:2015-09-18 14:31:04

标签: pseudocode bubble-sort

我在一本书上看到了这个:

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。

我的伪代码版本是正确的吗?

1 个答案:

答案 0 :(得分:0)

你是对的。内部while循环中的条件需要在每次迭代后有一种变化方式。