我编写了以下代码,使用BubbleSort对数组值中的元素进行排序。这是正确的还是有什么遗漏?我的测试用例很好,但也许是测试用例也缺少了一些东西。
public void sort(ValuePair[] values) {
ValuePair value = null;
for (int i = 0; i < values.length; i++) {
for (int j = 1 + i; j < values.length; j++) {
if (values[i].getValue() > values[j].getValue()) {
value = values[j];
values[j] = values[i];
values[i] = value;
}
}
}
}
答案 0 :(得分:2)
您的代码是正确的,因为它会对数组进行排序。但是,它总是需要在阵列上传递N *(N-1)。这不是 用于实现的典型算法 泡泡排序。典型的算法使用重复循环和测试进行排序。这有点效率,因为它 数组排序后立即终止(考虑以排序数组开头的情况)。
阅读Wikepedia article on bubble sort,它很好地证明了这一点。
Bubble Sort的一个改进版本的伪编码版本是这样的:
procedure bubbleSort( A : list of sortable items )
n = length(A)
repeat
swapped = false
for i = 1 to n-1 inclusive do
if A[i-1] > A[i] then
swap(A[i-1], A[i])
swapped = true
end if
end for
n = n - 1
until not swapped
end procedure
这里的教训是,虽然您的算法和Wikepedia算法都具有相同的大O特性,但是变化很小 它们的实施方式可以对它们的实际性能特征产生重大影响。