冒泡排序
1.算法的介绍
冒泡排序是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,将大的元素往后挪。循环重复地进行直到没有再需要交换,也就是说该数列已经排序完成。通俗的将元素比喻成汽包, 越大的汽包越往上“浮”到数列的末端。
2.算法的原理
对于数组arr:
-
0~N-1位置范围上,两两交换,找出最大的数放到N-1位置, 搞定N-1位置上的数;
-
0~N-2位置范围上,两两交换,找出最大的数放到N-2位置, 搞定N-2位置上的数;
-
重复以上步骤;在没有排序的位置依次搞定最后一个位置上的数;
-
直到:0~1位置范围上,两两交换,找出最大的数放到1位置, 搞定1位置上的数。
3.动态图演示

public static void bubbleSort(int[] arr) {
// 1.参数判断
if (arr == null || arr.length < 2) return;
for (int i = arr.length - 1; i > 0; i--) { // 临界把握: i = 0 时,arr已经排行序,所以i > 0
// 0 ~ n-1 上两两交换找出最大值 放到n-1位置
// 0 ~ n-2 上两两交换找出最大值 放到n-2位置
for (int j = 0; j < i; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr, j, j+1);
}
}
}
}
// ^ 异或 交换 arr上i和j上的值;
public static void swap(int[] arr, int i, int j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[j] ^ arr[i];
arr[i] = arr[i] ^ arr[j];
}
5.算法评估
-
时间复杂度:O(N^2)
-
空间复杂度:O(1)
代码地址:

浙公网安备 33010602011771号