Java 冒泡排序与选择排序原理及代码实现

追风的人
追风的人
发布时间:2026-10-14| 2人浏览过
原创

掌握基础排序算法是理解计算机科学与优化程序性能的关键环节。本文将详细解析 Java 中的经典排序算法——冒泡排序与选择排序,涵盖其工作原理、逻辑步骤及完整代码示例。

冒泡排序(Bubble Sort)

基本思想: 冒泡排序通过重复遍历待排序的列表,比较相邻的两个元素,如果它们的顺序错误就进行交换。每一轮遍历都会将当前未排序部分的最大值“浮”到序列的末尾,就像水泡从水底升起一样。

第1步:遍历与比较

  • 操作入口: 第一层循环控制总的遍历趟数,第二层循环负责执行具体的比较。
  • 动作说明: 从第一个元素开始,依次比较 a[j] 和 a[j+1]。若前者大于后者,则交换位置。
  • 关键参数: 内层循环的边界通常设为 a.length - i - 1,因为每趟结束后,最后 i 个元素已经是排好序的,无需再参与比较。

以下是标准的 Java 冒泡排序实现代码:

public class Paixu {
    public static void main(String[] args) {
        int[] a = {2, 6, 4, 5, 1, 7, 3};
        // 外层循环控制需要遍历的趟数
        for (int i = 0; i < a.length - 1; i++) {
            // 内层循环执行相邻元素的比较与交换
            for (int j = 0; j < a.length - i - 1; j++) {
                if (a[j] > a[j + 1]) {
                    // 交换位置
                    int n = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = n;
                }
            }
        }
        // 输出结果验证
        for (int val : a) {
            System.out.println(val);
        }
    }
}

如上图所示,数据在内存中的流转过程体现了这种逐步逼近正确顺序的逻辑。

选择排序(Selection Sort)

基本思想: 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

第1步:寻找极值并交换

  • 操作入口: 同样使用两层嵌套循环,但目的与冒泡不同。
  • 动作说明: 假设当前位置 i 是最小值的位置,然后遍历剩余元素(从 i+1 到末尾)。一旦发现比当前假设的最小值更小的元素,就更新“最小值索引”。
  • 重要参数: 只有在确认了本轮真正最小的元素之后,才进行一次交换操作。这减少了频繁交换带来的开销。

选择排序的代码实现逻辑如下:

public class SelectSortDemo {
    public static void main(String[] args) {
        int[] arr = {34, 56, 3, 234, 767, 89, 0, 324, 1, 32, 54, 89, 8};

        // 外层循环控制选定位置的迭代次数
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i; // 默认当前位置为最小值索引
            // 内层循环寻找后续元素中的真正的最小值
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[minIndex] > arr[j]) {
                    minIndex = j; // 更新更小的元素索引
                }
            }
            // 如果找到的最小值不是当前 i 位置的元素,则进行交换
            if (minIndex != i) {
                int temp = arr[minIndex];
                arr[minIndex] = arr[i];
                arr[i] = temp;
            }
        }
    }
}

对比上面展示的冒泡排序版本(即 Paixu 类中的第二个变体),标准的选择排序实现通常先记录索引再统一交换,这在处理大数组时效率更高一些。而某些简化的“选择”写法虽然也属于广义的选择逻辑,但在严格定义上略有差异。

总结与应用场景

虽然这两种算法的时间复杂度均为 O(n²),在实际生产环境中处理大规模数据时不如快速排序高效,但它们结构清晰、易于理解,是学习计算机算法入门的绝佳案例。对于小型数据集或需要保持特定交换稳定性的场景,它们依然具有参考价值。

以上就是 Java 冒泡排序和选择排序的详细代码解析与实现,更多关于 Java 算法优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。