当前位置: 首页 > news >正文

Java 排序教程

Java 排序教程

排序是数据处理的核心操作,Java 提供了多种实现方式。本教程涵盖内置排序方法和常用算法实现,帮助您逐步掌握排序技术。


一、Java 内置排序方法
  1. Arrays.sort()
    适用于基本类型数组和对象数组:

    import java.util.Arrays;// 整型数组排序
    int[] numbers = {5, 2, 9, 1};
    Arrays.sort(numbers);  // 结果: [1, 2, 5, 9]// 对象数组排序(需实现Comparable接口)
    String[] names = {"John", "Alice", "Bob"};
    Arrays.sort(names);    // 结果: ["Alice", "Bob", "John"]
    

  2. Collections.sort()
    专为 List 集合设计:

    import java.util.ArrayList;
    import java.util.Collections;ArrayList<Integer> list = new ArrayList<>();
    list.add(10); list.add(3); list.add(7);
    Collections.sort(list);  // 结果: [3, 7, 10]
    


二、常用排序算法实现
1. 冒泡排序(Bubble Sort)
  • 原理:重复比较相邻元素,将较大值向后移动
  • 时间复杂度:$O(n^2)$
public static void bubbleSort(int[] arr) {for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length - i - 1; j++) {if (arr[j] > arr[j + 1]) {// 交换相邻元素int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}

2. 插入排序(Insertion Sort)
  • 原理:构建有序序列,逐个插入未排序元素
  • 时间复杂度:$O(n^2)$(最优情况 $O(n)$)
public static void insertionSort(int[] arr) {for (int i = 1; i < arr.length; i++) {int key = arr[i];int j = i - 1;// 将大于key的元素后移while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j--;}arr[j + 1] = key;  // 插入key到正确位置}
}

3. 快速排序(Quick Sort)
  • 原理:分治法,选取基准值分割数组
  • 时间复杂度:平均 $O(n \log n)$,最差 $O(n^2)$
public static void quickSort(int[] arr, int low, int high) {if (low < high) {int pi = partition(arr, low, high);  // 获取基准点索引quickSort(arr, low, pi - 1);  // 递归左子数组quickSort(arr, pi + 1, high); // 递归右子数组}
}private static int partition(int[] arr, int low, int high) {int pivot = arr[high];  // 选择最右元素为基准int i = low - 1;for (int j = low; j < high; j++) {if (arr[j] < pivot) {i++;// 交换小于基准的元素int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}// 将基准放到正确位置int temp = arr[i + 1];arr[i + 1] = arr[high];arr[high] = temp;return i + 1;
}


三、算法选择指南
场景推荐算法原因
小规模数据插入排序常数因子小,实现简单
通用场景快速排序平均性能最优
内存敏感堆排序$O(1)$ 额外空间
稳定性要求归并排序稳定且 $O(n \log n)$
内置实现Arrays.sort()优化过的双轴快速排序

关键概念

  • 稳定性:相等元素的相对顺序不变(如插入排序)
  • 时间复杂度:衡量算法随数据规模的增长速度
  • 空间复杂度:算法运行所需的额外存储空间

通过本教程,您可掌握 Java 排序的核心方法。建议从内置方法入手,再逐步实现经典算法以加深理解。

http://www.dtcms.com/a/317418.html

相关文章:

  • P1983 [NOIP 2013 普及组] 车站分级
  • 《第五篇》基于RapidOCR的图片和PDF文档加载器实现详解
  • 分布式文件系统07-小文件系统的请求异步化高并发性能优化
  • LeetCode——118. 杨辉三角
  • 数据结构(四)内核链表、栈与队列
  • Go语言数据类型深度解析:位、字节与进制
  • 实时数据可视化工具SciChart.js v4.0即将发布——扩展更多极坐标图表
  • 【前端】问题总结
  • Spring Data MongoDB 教程:用 @Query 快速实现字段查询
  • 大前端游戏应用中 AI 角色行为智能控制
  • STM32CubeIDE新建项目过程记录备忘(九) A/D转换并用串口定时上报
  • 基于可视化分析的房地产市场监测与预警机制,展示二手房的价格趋势、区域分布、户型结构等关键信息
  • DataKit 采集器敏感信息加密最佳实践
  • NineData 新增支持 AWS ElastiCache 复制链路
  • 从 0 到 1 创建 InfluxDB 3 表:标签、字段、命名规范一篇讲透
  • 什么是单元测试?
  • 完美解决hive external表中csv字段内容含“,“逗号的问题
  • 贪心算法学习 跳跃游戏
  • 利用OJ判题的多语言优雅解耦方法深入体会模板方法模式、策略模式、工厂模式的妙用
  • macOS Python 安装
  • 《设计模式之禅》笔记摘录 - 13.迭代器模式
  • 外观模式(Facade Pattern)及其应用场景
  • 【设计模式精解】从根上理解模板方法设计模式及其应用
  • RN项目环境搭建和使用-Mac版本(模拟器启动不起来的排查)
  • Python虚拟环境完全指南:pyenv vs venv 在macOS上的使用详解
  • Mac安装WebStorm
  • java中Reflection反射(一)
  • MCU AI/ML - 弥合智能和嵌入式系统之间的差距
  • Java猜数字简易小游戏可复制
  • qt6 cmake vscode加载qrc图片资源