2015-09-17 42 views
0

我從維基百科這個僞代碼:氣泡分類的這些僞代碼如何工作?

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 <-- false

爲什麼它在開始時設置爲false?如果它沒有設置爲false,會發生什麼?

而最後一行,在維基百科這是寫:

 end if 
    end for 
    until not swapped 
end procedure 

以及從書中的僞它寫成:

while(swapped = true) 

是什麼,這些最後幾行是什麼意思?

+0

有兩個循環。你從哪裏得到這樣的想法,即它只是一次通過清單? –

+0

此外,它聽起來像您無法理解僞代碼的語法,而不是算法。我建議你閱讀本書介紹語法的章節。 –

+0

不好意思,我真的沒有這個想法(我會編輯它)。但我不明白最後的陳述意味着什麼。如果沒有最後的陳述,如果我沒有錯,那將通過列表一次。 – Coder88

回答

1

swapped變量跟蹤在最後一次通過陣列時是否進行了任何交換。

  • 如果進行了交換,數組仍然沒有排序,我們需要繼續。
  • 如果沒有交換,那麼數組已經排序,我們可以在那裏停下來。否則,我們將做冗餘迭代。

這是我們可以使泡沫排序更高效的優化之一。 如果您有興趣瞭解更多的優化,你可以看看這裏: http://www.c-programming-simple-steps.com/bubble-sort.html

然而,即使進行了優化,冒泡排序是效率太低,在實踐中使用。在學習的同時查看一個有趣的案例,但是如果您需要一個簡單的排序算法,請使用插入排序。