跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Javajava算法

Java 常见排序算法实现与解析

Java 排序算法是数据结构中的核心内容,涵盖冒泡排序与插入排序等经典方法。冒泡排序通过相邻元素交换实现有序化,适合小规模数据;插入排序则基于构建有序序列的思想,效率略优。提供完整可运行的 Java 代码示例,解析关键逻辑与注意事项,帮助开发者理解底层原理并应用于实际场景。

漫步发布于 2016/1/25更新于 2026/4/251 浏览
Java 常见排序算法实现与解析

冒泡排序

冒泡排序是最基础的排序算法之一,通过重复遍历数组,比较相邻元素并交换位置来实现排序。虽然效率不高,但逻辑简单,适合理解排序原理。

public class BubbleSort {
    public static int[] bubbleSort(int[] array) {
        if (array == null) {
            return null;
        }

        for (int i = 0; i < array.length - 1; i++) {
            // 优化:如果本轮没有发生交换,说明已经有序,可提前结束
            boolean swapped = false;
            for (int j = 0; j < array.length - 1 - i; j++) {
                if (array[j] > array[j + 1]) {
                    // 使用临时变量交换,避免整数溢出风险
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    swapped = true;
                }
            }
            if (!swapped) break;
        }

        return array;
    }
}

注意这里我稍微调整了循环边界和交换逻辑。原代码中的算术交换(加减法)在极端情况下可能导致整数溢出,实际开发中建议使用临时变量。另外增加了 swapped 标记,当某一轮遍历未发生任何交换时,说明数组已有序,可以直接退出,提升性能。

插入排序

插入排序的思路类似于整理扑克牌。它将数组分为'已排序'和'未排序'两部分,每次从未排序部分取出一个元素,插入到已排序部分的合适位置。

public class InsertSort {
    public static int[] insertSort(int[] array) {
        if (array == null || array.length <= 1) {
            return array;
        }

        for (int i = 1; i < array.length; i++) {
            int key = array[i];
            int j = i - 1;

            // 将比 key 大的元素向后移动一位
            while (j >= 0 && array[j] > key) {
                array[j + 1] = array[j];
                j--;
            }
            array[j + 1] = key;
        }

        return array;
    }
}

这段代码补全了原本截断的逻辑。核心在于内层的 while 循环,它负责找到插入点并将大元素后移。插入排序在处理小规模或部分有序的数据时表现优于冒泡排序,且是稳定的排序算法。

小结

这两种算法都属于 $O(n^2)$ 的时间复杂度,适合数据量较小的场景。在实际工程中,面对大规模数据通常会选择快速排序、归并排序或堆排序。理解这些基础算法有助于深入掌握更复杂的结构设计与优化思路。

目录

  1. 冒泡排序
  2. 插入排序
  3. 小结
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog

更多推荐文章

查看全部
  • SpringBoot 集成 RabbitMQ:核心原理解析
  • Spring Cloud Feign 入门实战:声明式 HTTP 客户端详解
  • 手写一个通用的 Java 重试机制
  • C# 日期处理实战:计算周范围与周数
  • 微服务架构中的 Apollo 配置中心实战详解
  • 企业级 Redis 开发规范与避坑指南
  • JavaScript 网络请求实战:GET 与 POST 方法详解
  • JavaScript 表单验证禁用与选择框属性操作指南
  • 分布式与微服务架构下的 Session 同步方案
  • 应届生无项目经验,求职碰壁该如何应对?
  • Python 教学方案管理系统设计与实现
  • C 语言实战:比较两个分数的大小
  • PyTorch 复合函数求导:链式法则与自动微分实战
  • Spring Cloud Gateway 网关核心概念与架构解析
  • JSP 数据库备份功能源码示例
  • Java 反射性能为何变慢?深度解析与优化实践
  • 设计模式:模板方法模式详解
  • ROS 核心组件与工具概览
  • 腿式移动机器人:构造、稳定性与生物启发设计
  • Django 启动报错:SECRET_KEY 设置不能为空

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online