原先我們在課堂上的方法是:
for (int i = data.length-1; i > 0; i--) {
    for (int j = 0; j < i; j++) {
        if (data[j] > data[j+1]) {
            int tmp = data[j];
            data[j] = data[j+1];
            data[j+1] = data[j];
        }
    }
}
這樣寫的話, best case 是 O(n^2), 不過有種implementation, 可以加一點多餘的判斷, 好讓Bubble Sort的best case 成為 O(n)
for (int i = data.length-1; i > 0; i--) {
    int swaps = 0;
    for (int j = 0; j < i; j++) {
        if (data[j] > data[j+1]) {
            int tmp = data[j];
            data[j] = data[j+1];
            data[j+1] = data[j];
            swaps++;
        }
    }
    if (swaps == 0) break;
}
事實上, wiki上有更好的方法

int n = data.length;
do {
    int newn = 0;
    for (int j = 0; j < n - 1; j++) {
        if (data[j] > data[j+1]) {
            int tmp = data[j];
            data[j] = data[j+1];
            data[j+1] = data[j];
            newn = j+1; // 最後一次發生swap的位置
        }
    }
    n = newn;
} while (n > 1);


以上是趙淑君同學在wiki上看到和老師的說法不同, 所提出的疑問. 謝謝趙同學的細心與用功, 請助教幫趙同學加點分數, 也希望能有更多的同學如此努力.
各位也可以把這次的作業版本修正一下, 看這樣做, Bubble Sort能快多少

最後修改: 2012年 09月 3日(週一) 19:40