排序实现java - 教程

news/2025/9/17 15:08:25/文章来源:https://www.cnblogs.com/lxjshuju/p/19096801

排序算法概述

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.mzph.cn/news/906648.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.net core 发布到 iis 步骤

1. 打开服务器管理器,管理,添加角色和功能,把 IIS 相关的全勾上。 2. 安装.net core 环境,需要 ASP.NET Core 运行时的 Hosting Bundle 版本,其他版本没用。 3. 安装 webdeploy, 服务器防火墙打开8172端口。 4. 在 IIS 上创建站点, 配置的文件夹权限需要添加 everyone 的…

kylin SP2安装mysql8.4.5

环境:OS:kylin SP2mysql:8.4.5 glibc2.17,建议安装glibc.2.28版本 查看系统glibc版本[root@localhost soft]# ldd --version ldd (GNU libc) 2.28 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There i…

微信社群机器人接口

微信个人号开发API/文档/教程 大家一般需求点无非是以下几个需求: 1.开发个人微信营销系统 2.开发自定义的微信机器人, 3.开发微信智能聊天客服系统 4.定制行业内的群数据分析功能需求很简单,业务代码贼好撸,但是如何和微信交互呢,如何取到微信数据调用相关聊天接口呢,具体…

C++的枚举类

语法:enum class 枚举类名 [: 底层类型] {枚举值1,枚举值2,... };一般形式(当然我们一般默认成员都显转int,因此底层类型一般不写) C++的枚举类: 在C++中,enum class是一种类型安全的枚举类型,它比传统的enum类型提供了更好的作用域控制和类型安全性。使用enum class可以…

Revit二次开发 钢筋生成API(一)

1、自由钢筋生成API创建不受约束的自由形式钢筋。以后不能将约束添加到此钢筋。public static Rebar CreateFreeForm(Document doc,RebarBarType barType,Element host,IList<CurveLoop> curves,out RebarFreeFormValidationResult error )通过此方法,可以创建一个或者多…

方法

什么是方法 方法是程序中最小的执行单位 实际开发中:重复的代码,具有独立功能的代码可以抽取到方法当中 实际开发中方法的好处:可以提高代码的复用性 提高代码的可维护性 最简单的方法定义和调用 方法的格式:把一些代码打包在一起,用到时候就调用 方法定义:把一些代码打包在…

详细介绍:PHP基础-语法初步(第七天)

详细介绍:PHP基础-语法初步(第七天)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !importan…

如何通过Python SDK 删除 Collection

本文介绍如何通过Python SDK删除一个已创建的Collection。 重要 删除Collection后,该Collection所有数据将删除且不可恢复,请谨慎操作。 前提条件已创建Cluster:创建Cluster已获得API-KEY:API-KEY管理已安装最新版SDK:安装DashVector SDK接口定义 Python示例: Client.del…

Inventor Professional 2026.1.1 产品设计与工程制图

描述 Autodesk Inventor提供了专业级机械设计、文档编制和产品仿真工具。参数化建模、直接建模、自由形状建模和基于规则的设计功能的强大组合。用于钣金、结构件设计、三维布管、电缆和线束、演示、渲染、仿真、机床设计等的集成工具。值得信赖的 DWG™ 兼容性,强大的基于模型…

叮当计步微信小程序系统

1. 概述总结 叮当计步小程序系统是基于微擎系统交付的应用,微擎系统是一款基于 PHP 开发的开源应用生态系统,主要用于快速搭建微信公众号、小程序等应用,同时支持 Web 系统开发与部署。该计步系统历经数月研发,投入 20 多万研发费用,注重数据可靠性、系统扩展性和高并发支…

叮当计步微信小程序系统

1. 概述总结 叮当计步小程序系统是基于微擎系统交付的应用,微擎系统是一款基于 PHP 开发的开源应用生态系统,主要用于快速搭建微信公众号、小程序等应用,同时支持 Web 系统开发与部署。该计步系统历经数月研发,投入 20 多万研发费用,注重数据可靠性、系统扩展性和高并发支…

maven项目连接DM数据库和基本sql使用

maven项目连接DM数据库和基本sql使用直接引入Maven依赖<!-- DM数据库JDBC驱动 --> <dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.3.140</version> </dependency>dem…

maven项目连接DM数据库和基本sql使用

maven项目连接DM数据库和基本sql使用直接引入Maven依赖<!-- DM数据库JDBC驱动 --> <dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.3.140</version> </dependency>dem…

【中国计算机学会CCF主办】第六届人工智能、大数据与算法国际学术会议(CAIBDA 2026)

第六届人工智能、大数据与算法国际学术会议(CAIBDA 2026) 2026 6th International Conference on Artificial Intelligence, Big Data and Algorithms (CAIBDA 2026)重要信息 大会时间:2026年6月12-14日 大会地点:天津(线上同步进行) 大会官网:www.caibda.org *为报名…

【中国计算机学会CCF主办】第六届人工智能、大数据与算法国际学术会议(CAIBDA 2026)

第六届人工智能、大数据与算法国际学术会议(CAIBDA 2026) 2026 6th International Conference on Artificial Intelligence, Big Data and Algorithms (CAIBDA 2026)重要信息 大会时间:2026年6月12-14日 大会地点:天津(线上同步进行) 大会官网:www.caibda.org *为报名…

仿腾讯会议——退出房间

客户端 1、添加绘图成员 2、 实现视频的重绘事件 3、实现关闭函数 定义信号和函数 关闭函数实现 添加清空列表功能 在房间内添加用户映射表 中介者退出函数 移除用户展示界面 离开房间请求处理 服务端

蓝桥杯分享经验

系列文章目录 提示&#xff1a;小白先看系列 第一章 蓝桥杯的钱白给吗 文章目录 系列文章目录前言一、自我介绍二、经验讲解:1.基础知识2.进阶知识3.个人观点 三、总结四、后续 前言 第十六届蓝桥杯已经省赛已经结束了&#xff0c;相信很多小伙伴也已经得到自己的成绩了。接下…

C++:面试题汇总

C 基础 指针和引用的区别 指针是一个变量&#xff0c;存储的另一个变量的内存地址&#xff0c; 可以重复赋值执行不同的对象&#xff0c;运行为nullptr 适合动态分配&#xff0c;例如使用new,delete时&#xff1b; 用在实现链表、树等数据结构时&#xff1b; 以及明确没有对象…

python调wfdb库读心电数据库的注释文件中NUL问题

切入点如题。开始使用字符串中通配符&#xff0c;没用。查找DeepSeek给出下面结果&#xff1a; 在 Python 中&#xff0c;字符串中出现 [NUL] 表示字符串包含一个 ASCII 空字符&#xff08;ASCII 值为 0 的字符&#xff0c;即 \x00&#xff09;。这个符号通常是某些编辑器或调…

iOS Runtime与RunLoop的对比和使用

Runtime 机制 核心概念 Objective-C 的动态特性&#xff1a;Objective-C 是一门动态语言&#xff0c;很多工作都是在运行时而非编译时决定的消息传递机制&#xff1a;方法调用实际上是发送消息 objc_msgSend(receiver, selector, ...)方法决议机制&#xff1a;动态方法解析、…