【问题标题】:How these pseudocodes for bubble sort works?这些冒泡排序的伪代码是如何工作的?
【发布时间】: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_pa​​ir

在第 4 行,写成 swapped=falseswapped_pair &lt;-- 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 ifend forend procedure 来完成同样的事情——所以实际上它是完全一样的对同一件事用不同的词。而&lt;-- 真的只是= 所以swapped=falseswapped_pair &lt;-- false 也是一样的。

标签: pseudocode bubble-sort


【解决方案1】:

swapped 变量会跟踪在最后一次通过数组时是否进行了任何交换。

  • 如果进行了交换,数组仍未排序,我们需要继续。
  • 如果没有进行交换,则数组已经排序,我们可以停止。否则我们将进行冗余迭代。

这是我们可以做的优化之一,以提高冒泡排序的效率。 如果您对更多优化感兴趣,可以查看此处: http://www.c-programming-simple-steps.com/bubble-sort.html

但是,即使经过优化,冒泡排序也太低效而无法在实践中使用。这是一个有趣的案例,在学习时可以查看,但如果您需要一个简单的排序算法,请改用插入排序。

【讨论】:

    猜你喜欢
    • 2018-09-10
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    相关资源
    最近更新 更多