2

(不,这不是家庭作业,我只是发现了这个错误,并认为在这里分享它可能有用)

import java.util.List;

public class BubbleSorter {

    public <T extends Comparable<T>> void sort(List<T> list) {
        while (true) {
            boolean didWork = false;
            for (int i = 0; i < list.size() - 1; ++i) {
                if (list.get(i).compareTo(list.get(i + 1)) > 0) {
                    swap(list, i, i + 1);
                    didWork = true;
                    break;
                }
            }

            if (!didWork)
                return;
        }
    }

    private static <T> void swap(List<T> list, int i, int j) {
        T tmp = list.get(i);
        list.set(i, list.get(j));
        list.set(j, tmp);
    }
}
4

2 回答 2

5

从最严格的意义上说,这不是一个错误,但是break;当你发现反转时这样做会给你的排序带来O(n^3)复杂性,这几乎是不可取的。break可以删除。

于 2010-12-31T21:45:28.650 回答
0

swap应该设置 j,而不是 i+1 。

于 2010-12-31T21:30:38.427 回答