冒泡排序虽然简单,但实际上没有想象的那么naive,网上翻看了多个冒泡排序的实现,很多仅仅总是进行n-1趟排序,而没有实现如下两点:
1. 如果序列完全有序,则只有一趟排序然后退出, 如1,2,3,4,5,6,7;
2. 如果序列后半段数据已经有序,是否在下趟排序时能直接跳过此序列,从而减少排序趟数, 如 2, 1, 8, 9, 10, 20
public static void bubbleSort(int[] data) {
int n = data.length;
int i = n-1;
if (i > 0) {
int t = 0;
for (int j = 0; j < i; j++) {
if (data[j] > data[j+1]) {
int tmp = data[j];
data[j] = data[j+1];
data[j+1] = tmp;
t = j;
}
}
i = t;
}
}