算法思路:
-
设有数组
int[] arr
,其长度为n
; -
比较数组元素
arr[0]
与arr[1]
,如果arr[0]
小于或大于arr[1]
,交换元素; -
类推:比较
arr[1]
与arr[2]
,根据情况交换元素... 直到数组尾部,此时数组中最大(或最小)的一个数已经浮到数组尾部; -
缩小循环范围
[0, n - 1]
,上重复上述流程,直至范围为0
。
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int[] arr = new int[]{2, 3, 1, 6, 8, 9, 5, 0, 4, 7};
bubbleSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
public static void bubbleSort(int[] arr, int left, int right) {
/**
* 限定排序范围:
* 0: [left, right - 0]
* 1: [left, right - 1]
* 2: [left, right - 2]
* ...
* n: [left, right - n]
*/
for (int end = right; end > left; --end) {
/**
* 对比数组相邻元素,根据情况交换
*/
for (int i = left; i < end; ++i) {
if (arr[i] > arr[i + 1]) {
swap(arr, i, i + 1);
}
}
}
}
/* 数组元素交换函数 */
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
/* EOF */
代码清单:冒泡排序 - Java 实现
冒泡排序算法复杂度分析:
-
时间复杂度:
O(n^2)
-
空间复杂度:
O(1)