左右相邻进行比较,每次排出最大的。
第一轮在0~n-1位置处选出最大的。
第二轮在0~n-2位置处选择最大的。
最后一轮0~1。所以首先需要n-1轮。每一轮里面需要遍历每个元素进行比较交换得到最大的。
Java代码如下
public static void bubbleSort(int[] arr){
if (arr == null || arr.length<2){
return;
}
//共计arr.leng-1轮。
for (int i=arr.length-1 ;i >0 ;i--){
//每一轮遍历比较交换冒泡得到最大的。
for (int j =0 ; j arr[j+1]){
swap(arr,j,j+1);
}
}
}
}
private static void swap(int[] arr, int i, int j) {
int tem = arr[i];
arr[i] = arr[j];
arr[j] = tem;
}
如果数组中不存在相同的元素。也就是arr[i] != arr[i+1]的情况。可以使用异或运算进行两个值的交换。不用开辟一个临时变量。
代码如下:
private static void swap1(int[] arr, int i,int j){
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];//arr[j] = arr[i] ^ arr[j] ^ arr[j] = arr[i];
arr[i] = arr[i] ^ arr[j];//arr[i] = arr[i] ^ arr[j] ^ arr[i] = arr[j];
}



