这些用于冒泡排序的伪代码如何工作?

时间:2015-09-17 22:31:58

标签: pseudocode bubble-sort

我从维基百科得到了这个伪代码:

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&lt; - false部分和最后一行。

在第4行写入swapped=falseswapped_pair <-- false时。

为什么一开始就设置为false?如果没有设置为假,会发生什么?

最后几行,在维基百科上写道:

       end if
     end for
   until not swapped
end procedure

根据书中的伪代码,它写道:

while( swapped = true )

这些最后一行是什么意思?

1 个答案:

答案 0 :(得分:1)

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

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

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

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