这是一个正确的冒泡排序算法吗?

时间:2014-01-20 15:30:53

标签: java bubble-sort

我编写了以下代码,使用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;
            }
        }
    }
}

1 个答案:

答案 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特性,但是变化很小 它们的实施方式可以对它们的实际性能特征产生重大影响。