冒泡排序【改进】

冒泡排序是最简单的排序算法之一,在这里首先要说明的是一个要注意的地方。

冒泡排序在最好情况下时间复杂度可以是o(n^2),也可以是o(n)。

下面看一种大家看得最多的写法

public void bubbleSort(int arr[]) {
    for(int i = 0, len = arr.length; i < len - 1; i++) {
        for(int j = 0; j < len - i - 1; j++) {
            if(arr[j + 1] < arr[j]) {
                swap(arr, j, j + 1);
            }
        }
    }    
}

上面这样写最好情况下也是o(n^2).


那么再来看下面这种写法

public void bubbleSort(int arr[]) {
    boolean didSwap;
    for(int i = 0, len = arr.length; i < len - 1; i++) {
        didSwap = false;
        for(int j = 0; j < len - i - 1; j++) {
            if(arr[j + 1] < arr[j]) {
                swap(arr, j, j + 1);
                didSwap = true;
            }
        }
        if(didSwap == false)
            return;
    }    
}

可以看到加了一个标志位,这时候最好的情况下复杂度就是o(n)了

最后,我认为网上公认的冒泡排序在最好情况下的时间复杂度是o(n),并且支持第二种写法。

你可能感兴趣的:(algorithm)