冒泡排序和选择排序时间复杂度均为o(n²),适合教学或小数据;冒泡每轮将最大值“冒泡”至末尾,可加swapped优化提前终止;选择排序每轮在未排序区选最小值与首位置交换。

Java 中实现冒泡排序和选择排序都很简单,不需要额外依赖,纯手工控制循环和比较即可。两种算法时间复杂度都是 O(n²),适合理解排序逻辑或小规模数据,不推荐用于生产环境的大数组(应优先用 Arrays.sort())。
冒泡排序:相邻元素反复比较交换
核心思想是每轮把当前未排序部分的最大值“冒泡”到末尾。共进行 n−1 轮,每轮从头开始两两比较,前面比后面大就交换。
示例代码:
public static void bubbleSort(int[] arr) {
int n = arr.length;
for (int i = 0; i arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}小优化:若某轮未发生任何交换,说明已有序,可提前结束(加一个 boolean swapped 标志判断)。
选择排序:每次选最小值放到已排序区末尾
将数组分为“已排序区”和“未排序区”。每轮在未排序区中找最小值,与未排序区第一个位置交换。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
示例代码:
public static void selectionSort(int[] arr) {
int n = arr.length;
for (int i = 0; i 注意:选择排序的交换次数最多 n−1 次,比冒泡排序(可能达 O(n²) 次)更少,但比较次数固定为 n(n−1)/2 次。
使用前后的完整示例
你可以这样测试:
int[] nums = {64, 34, 25, 12, 22, 11, 90};
System.out.println("原数组: " + Arrays.toString(nums));
bubbleSort(nums); // 或 selectionSort(nums)
System.out.println("排序后: " + Arrays.toString(nums));记得导入:import java.util.Arrays;
该选哪个?简单对比
- 冒泡排序更容易理解,代码直观,适合教学;加优化后对近乎有序数组稍快
- 选择排序交换动作更少,写法稍紧凑,但无法利用数据初始顺序优化
- 两者都不稳定(相同值的相对位置可能改变),且不适用于大数据
- 真实开发中直接调用
Arrays.sort(arr)——底层对 int 数组使用双轴快排,高效且经过充分测试
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










