冒泡排序是最简单的排序算法之一,在这里首先要说明的是一个要注意的地方。
冒泡排序在最好情况下时间复杂度可以是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),并且支持第二种写法。