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

排序实现java - 教程

排序算法概述

Java中实现排序可以通过多种方式,包括内置方法、自定义算法或使用第三方库。常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序等。

使用Arrays.sort()方法

对于数组排序,Java提供了Arrays.sort()方法,支持对基本类型和对象数组排序。基本类型数组使用快速排序,对象数组使用归并排序。

import java.util.Arrays;
int[] arr = {5, 2, 9, 1, 5};
Arrays.sort(arr); // 升序排序
System.out.println(Arrays.toString(arr)); // 输出 [1, 2, 5, 5, 9]

使用Collections.sort()方法

对List集合排序可以使用Collections.sort()方法,默认按自然顺序升序排列。支持自定义Comparator实现复杂排序逻辑。

import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
List list = new ArrayList<>(List.of(5, 2, 9, 1, 5));
Collections.sort(list); // 升序排序
System.out.println(list); // 输出 [1, 2, 5, 5, 9]

自定义Comparator

需要降序或按特定字段排序时,可通过实现Comparator接口自定义排序规则。

Collections.sort(list, (a, b) -> b - a); // 降序排序
System.out.println(list); // 输出 [9, 5, 5, 2, 1]

实现快速排序算法

快速排序是一种分治算法,平均时间复杂度为O(n log n)。以下是递归实现的示例:

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);
}
}
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++;
swap(arr, i, j);
}
}
swap(arr, i + 1, high);
return i + 1;
}
void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}

Java 8 Stream排序

利用Stream API可以简洁地实现排序,支持链式操作和并行处理。

List sortedList = list.stream()
.sorted() // 自然排序
.collect(Collectors.toList());
List reverseList = list.stream()
.sorted(Comparator.reverseOrder()) // 降序排序
.collect(Collectors.toList());

性能比较

  • 小数据量:插入排序或冒泡排序可能更简单。
  • 大数据量:快速排序、归并排序或堆排序更高效。
  • 稳定性要求:归并排序是稳定排序,相同元素相对位置不变。
http://www.wxhsa.cn/company.asp?id=6670

相关文章:

  • .net core 发布到 iis 步骤
  • kylin SP2安装mysql8.4.5
  • 微信社群机器人接口
  • C++的枚举类
  • Revit二次开发 钢筋生成API(一)
  • 方法
  • 详细介绍:PHP基础-语法初步(第七天)
  • 如何通过Python SDK 删除 Collection
  • maven项目连接DM数据库和基本sql使用
  • 【中国计算机学会CCF主办】第六届人工智能、大数据与算法国际学术会议(CAIBDA 2026)
  • 图片 - voasem
  • 面试时让你设计一个“朋友圈点赞”功能测试,如何回答才出彩?
  • 企训宝教育培训微信小程序系统
  • Inventor Professional 2026.1.1 产品设计与工程制图
  • 叮当计步微信小程序系统
  • fetch-event-source踩坑sse(getReader)后续 IOS全量返回问题
  • P12508 「ROI 2025 Day2」程序员的日常
  • 手机上有哪些比较好用的待办事项提醒工具 - 指南
  • Redis源码学习 -- 数据类型编码 -- List - -蓝蜗牛
  • 乌班图无法登录桌面,只能终端登录用户。且有网拉不了包(DNS问题)
  • 事半功倍是蠢蛋53 tornado接口报错
  • 完整教程:云手机的技术架构可分为哪些
  • AI提示词遇见精密算法:TimeGuessr如何用数学魔法打造文化游戏新体验
  • Arkime:大规模开源网络分析与数据包捕获系统
  • kylin SP2安装mysql 8.0.41
  • SAP采购订单数据获取
  • get和post如何理解
  • me and my girlfriend WP复盘
  • 顺序表
  • 能源管理的数字神经:MyEMS如何重塑能效认知