跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava算法

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

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

漫步发布于 2016/1/25更新于 2026/6/1120 浏览
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折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • OpenClaw QQ 机器人接入指南
  • OpenClaw WebSocket 通道开发:从零构建自定义 AI 通信
  • 大模型技术入门与微调实战指南
  • Stable Diffusion XL 1.0 灵感画廊镜像免配置部署指南
  • LangChain 入门:Memory 记忆组件详解
  • Llama-Factory 模型评估模块详解:BLEU、ROUGE、Accuracy 全支持
  • C++ 类与对象进阶特性与编译器优化实战
  • OpenClaw 的 20 个精选 Skills 使用指南与实战技巧
  • 基于龙卷风优化算法的多无人机协同路径规划与 MATLAB 实现
  • Java 核心基础:数据类型、运算符与方法详解
  • DALL·E 3 图像生成功能及 API 应用详解
  • Java 9 到 Java 25 语言演进与技术革新解析
  • 2026 年 2 月 AIGC 行业模型发布与前沿资讯
  • Claude Code 安装配置与使用指南(Windows/macOS)
  • OpenClaw 本地部署配置飞书机器人指南
  • Python Tkinter 集成 DocsGPT 本地 API 开发实践
  • 无线蜂窝网络:原理、架构与代际演进
  • WebODM 免费开源无人机影像处理全流程详解
  • OpenClaw 接入飞书配置教程
  • SpringBoot+SSE 构建 AI 实时流式对话系统:原理剖析与代码实战

相关免费在线工具

  • 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