冒泡排序,顾名思义就跟生活中的“冒泡”现象相似:大的泡泡被压在下面就会自主地往上浮起。
在数组中,如果让一个无序的数组有序(例如升序),那么在数组左侧的较大的数就应该自主地向右移动。
因此,从左向右开始,依次与相邻的(右侧)数进行比较,如果arr[i]>arr[i+1],则交换二者位置,i就变为了i+1(即i++),此过程就为“冒泡”
那么如何优化?
当某一次冒泡过程时,从来没有发生过数据交换,则表明该数组已经有序了,则可以退出循环。
public static void BubbleSort(int[] array){
int temp = 0;
boolean flag = false;
for(int i = 0 ; i<array.length -1 ; ++i){
for(int j = 0 ; j< array.length - 1 - i; ++j){
if(array[j]>array[j+1]){
//如果逆序,则交换
temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
flag = true;
}
}
if(!flag){
break;
}else {
flag = false;
}
}
}