在网上看到了 both way bubble sort的算法,但是分析之后觉得在效率上等同于第二次优化的bubble sort。实现如下:
void bothWayBubbleSort( int array[]) {
int left = 0, right = array.length - 1;
while (left < right) {
boolean exchange = false;
int index = 0;
// 正向
for (int i = left; i < right; ++i) {
if (array[i] > array[i + 1]) {
int tmp = array[i];
array[i] = array[i + 1];
array[i + 1] = tmp;
index = i;
exchange = true ;
}
}
if (!exchange) {
break ;
}
// 重新定义右边界
right = index;
// 反向
for (int i = right; i > left; --i) {
if (array[i] < array[i - 1]) {
int tmp = array[i];
array[i] = array[i - 1];
array[i - 1] = tmp;
exchange = true ;
index = i;
}
}
if (!exchange) {
break ;
}
// 重新定义左边界
left = index;
}
}