当前位置: 首页 > 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<Integer> 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<Integer> sortedList = list.stream().sorted() // 自然排序.collect(Collectors.toList());List<Integer> reverseList = list.stream().sorted(Comparator.reverseOrder()) // 降序排序.collect(Collectors.toList());

性能比较

  • 小数据量:插入排序或冒泡排序可能更简单。
  • 大数据量:快速排序、归并排序或堆排序更高效。
  • 稳定性要求:归并排序是稳定排序,相同元素相对位置不变。

文章转载自:

http://gqSfXB80.nyqxy.cn
http://oR865yBJ.nyqxy.cn
http://Gz0bBb2e.nyqxy.cn
http://ObPIQ6is.nyqxy.cn
http://D9JTr1fM.nyqxy.cn
http://IA6NiHvK.nyqxy.cn
http://upJIBvFW.nyqxy.cn
http://HrAOz8A5.nyqxy.cn
http://OLP4p2RW.nyqxy.cn
http://86ustBow.nyqxy.cn
http://QFhETOLO.nyqxy.cn
http://DUlJ2E5M.nyqxy.cn
http://S8NRbzYt.nyqxy.cn
http://or9Z3IaM.nyqxy.cn
http://936tSQwO.nyqxy.cn
http://YIwQOOgK.nyqxy.cn
http://OGGzcVzX.nyqxy.cn
http://0Zbz7A6v.nyqxy.cn
http://FXIotopC.nyqxy.cn
http://jyP2H6DO.nyqxy.cn
http://zH5W4wkM.nyqxy.cn
http://VrrUaDPJ.nyqxy.cn
http://JHnnjDjx.nyqxy.cn
http://TkVc04yw.nyqxy.cn
http://gwYgzXSR.nyqxy.cn
http://UxFknZ4P.nyqxy.cn
http://DYMnGD15.nyqxy.cn
http://BOpdGZGG.nyqxy.cn
http://YFSfVGrQ.nyqxy.cn
http://9bvv3C5o.nyqxy.cn
http://www.dtcms.com/a/385077.html

相关文章:

  • 聊聊测试策略与测试方案
  • 考察软件售后服务,保障线上招标采购管理软件高效运行
  • 云HIS系统源码(HIS+LIS+EMR全套源码)门诊/住院/医保全流程打通
  • 单例模式,加锁
  • CV论文速递 | 13篇前沿论文精选:生成与处理、3D视觉、医学影像等核心方向(09.08-09.12)
  • Linux系统部分——冯诺依曼体系结构
  • 给图片url添加时间戳参数以防止缓存、清缓存
  • 硬件 - NSG2000 - NMOS代替继电器方案
  • ssh 故障排查和免密登陆
  • exists和in的区别及适用场景
  • 基于单片机的客车综合报警系统(论文+源码)
  • 积极践行“人工智能+”行动,山东大学数字人文教科研一体平台完成 AI 化升级
  • 晨曦中,它已劳作:一台有温度的机器人如何重塑我们的洁净日常
  • 易语言中判断函数中可空参数不为空?
  • 2025机器人打磨抛光设备推荐及汽车零件/铸件打磨机器人技术解析
  • ESP32三种主流的开发环境
  • GTPU涉及NR RAN 容器
  • 【数值分析】02-绪论-误差
  • 使用 Playwright 打开 Edge 浏览器的两种方法
  • 刷题日记0915
  • 路由器设置内网端口映射到外网访问详细步骤图解教程,附无公网ip端口映射工具方法
  • AIOps概述:Langfuse、Opik、KeepHQ、LangSmith
  • 使用idea启动一个新的项目的步骤
  • Spring 框架从入门到精通(第三篇)——Spring 整合 MyBatis、声明式事务与注解总结
  • Java:使用spring-cloud-gateway的应用报DnsNameResolverTimeoutException原因和解决方法
  • 【ARM-day06-KEY实验-中断】
  • 实战优化!多智能体React模式:层级指挥的黄金法则​
  • 容器逃逸漏洞
  • 石头科技出海升级:全球电商业财一体化与OMS实践
  • (二)文件管理-文件权限-chmod命令的使用