/**
* 冒泡排序
* 时间复杂度 O(n²)
* 空间复杂度 临时变量O(1),如果是算术法交换 O(0)
*/
public class ChangeBubbleSort {
public static void main(String[] args) {
int[] b = {3, 1, 5, 4, 6, 90, 48, 32, 78};
System.out.println(Arrays.toString(bubbleSort(b)));
}
/**
* 冒泡排序
*/
private static int[] bubbleSort(int[] array) {
if (array == null || array.length == 0) {
return array;
}
//外层需要array.length-1次循环
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]) {
//临时变量交换
swapByTemp(array, j, j + 1);
//算术法交换
//swapByArithmetic(array, j, j + 1);
}
}
}
return array;
}
/**
* 通过临时变量交换数组array的i和j位置的数据
*
* @param array 数组
* @param i 下标i
* @param j 下标j
*/
public static void swapByTemp(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
/**
* 通过算术法交换数组array的i和j位置的数据(有可能溢出)
*
* @param array 数组
* @param i 下标i
* @param j 下标j
*/
public static void swapByArithmetic(int[] array, int i, int j) {
array[i] = array[i] + array[j];
array[j] = array[i] - array[j];
array[i] = array[i] - array[j];
}
}
输入:
{3, 1, 5, 4, 6, 90, 48, 32, 78}
执行结果:
[1, 3, 4, 5, 6, 32, 48, 78, 90]