簡體   English   中英

有沒有一種方法可以實現冒泡排序算法?

[英]Is there only one way to implement a bubble sort algorithm?

我試圖實現自己的冒泡排序算法,而沒有在線查看任何偽代碼,但是現在,我已經成功完成了它,我的代碼看上去與我在網上看到的示例完全不同。 它們都涉及處理交換變量true或false。 我的實現根本不包含這種實現,因此我沒有進行冒泡排序嗎?

這是我在網上看到的示例:

for i = 1:n,
swapped = false
for j = n:i+1, 
    if a[j] < a[j-1], 
        swap a[j,j-1]
        swapped = true
→ invariant: a[1..i] in final position
break if not swapped

結束

這是我的實現:

void BubbleSort(int* a, int size)
{
    while (!arraySorted(a, size))
    {
        int i = 0;
        while (i < (size-1))
        {
            if (a[i] < a[i+1])
            {
                i++;
            }
            else
            {
                int tmp = 0;
                tmp = a[i+1];
                a[i+1] = a[i];
                a[i] = tmp;
                i++; 
            }
        }
    }
}

它做的是相同的工作,但是有什么不同嗎?

正如某些人指出的那樣,不帶標志的版本可以運行,但是速度很慢。

但是,如果您使用原始版本,並且僅丟棄標志(與break一起使用),它將仍然有效。 從您方便地發布的不變式中很容易看出。

沒有中斷的版本在最壞情況下的性能與中斷時幾乎相同(最壞的情況是按相反順序排序的數組)。 如果您想要一種可以在預定時間內完成的算法,則它比原始算法要好。

Wikipedia描述了另一個優化冒泡排序的想法 ,其中包括丟棄break

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM