public static void bubbleSort1(int[] arr){
if (arr == null || arr.length < 2){return;}
//大的放右边,所以依次比较arr[0]-->arr[5],0-->4,0-->3......
for (int end = arr.length - 1; end > 0; end--){
for (int j = 0; j < end; j++){
if (arr[j] > arr[j+1]){
swap(arr, j, j+1);
}
}
}
}
private static void swap(int[] arr, int i, int j){
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
上面的是冒泡排序第一种写法,大的放右面;下面是第二种写法,把小的放左边;
public static void bubbleSort2(int[] arr){
//小的放左边,所以依次比较arr[0]-->arr[5],1-->5,2-->5......
for (int i = 0; i < arr.length; i++){
for (int j = i+1; j < arr.length; j++){
if (arr[j] < arr[i]){
swap(arr, i, j);
}
}
}
}
下面是插入排序,思想为每一个数字与前一位比较,如果比前一位小,交换,一直到前一位不比它小为止。
public static void insertionSort(int[] arr){
//当比前一位数字小的时候,交换
for (int i = 1; i < arr.length; i++) {
//arr[i] 和前一位比较,一直交换到前面没有比它大的位置为止,j的范围为0-->i-1
for (int j = i - 1; j >= 0 && arr[j] < arr[j+1]; j--) {
swap(arr, j, j+1);
}
}
}