MinMAX Sort Vibe 项目
(又名「Two Birds, One Stone」)是一种全新设计的选择排序变体算法
MinMAX Sort(又名「Two Birds, One Stone」)是一种全新设计的选择排序变体算法,由独立开发者 Jod Enghog 创建并以开源方式发布。该算法在每一轮遍历中同时找出未排序数组的最小值和最大值,并将它们分别放置到数组的两端,从而将比较次数降低至约 0.25×n²,比传统冒泡排序和选择排序减少约一半的工作量。
项目简介
MinMAX Sort 是作者的第一个从头编写的排序算法 minSort 的后续作品。与标准选择排序每轮只找最小值不同,MinMAX Sort 在同一轮遍历中并行定位最小值和最大值的索引,再分别写入数组首尾两侧,实现双端排序。这种设计灵感来源于并行处理的思路——通过同时处理两个方向,将遍历轮次减半。
项目代码托管于 GitHub,采用 GNU General Public License v3.0 开源许可,已发布 Java 包(BlackBeans minMAX Sort 1.12j),可直接通过 Java import 引入使用。
核心功能
- 双向同时排序:每一轮同时定位并交换最小值和最大值,减少遍历轮次。
- 稳定排序:在满足特定条件下保持相同值元素的相对顺序(带星标说明)。
- 原地排序:不需要额外数组空间,空间复杂度 O(1)。
- 可预测的性能表现:无论输入数据分布如何,比较次数恒定在约 0.25×n²,无最坏情况退化问题。
- Java 库封装:提供 JEnghog.BlackBeans.Utility.minMAX 包,import 后一行调用即可完成排序。
技术实现
MinMAX Sort 的核心逻辑用伪代码表示如下:
loop i from 0 to n/2: loop j from i to n - i - 1: 找出未排序部分最小值的位置 找出未排序部分最大值的位置 同时缓存边界值(防止索引碰撞) 将最小值交换到 array(i) 将最大值交换到 array(n - i - 1)
关键设计点在于「同时缓存边界值」——当最小值和最大值分别位于数组两端时,直接交换不会产生冲突;但当两者之一恰好是待写入位置时,需要先缓存以避免覆盖。该算法使用 Java 实现,代码结构清晰,核心排序逻辑约 20 行。
性能实测数据(n=1000 随机数组):
- MinMAX Sort:250,500 次比较,3 毫秒
- Insertion Sort:250,187 次比较,2 毫秒(近乎有序数组场景更快)
- Selection Sort:499,500 次比较,3 毫秒
- Bubble Sort:499,500 次比较,7 毫秒
MinMAX Sort 在任意分布数据下均保持约 0.25×n² 的比较次数,不存在 Insertion Sort 在逆序情况下退化为 O(n²) 的风险。
快速上手
第一步:安装 Java 环境(JDK 18 及以上)。
第二步:下载 BlackBeans 包或 clone 仓库。
第三步:在代码中 import 并调用:
import JEnghog.BlackBeans.Utility.minMAX;
public class Main { public static void main(String[] args) { int[] x = {9, 8, 7, 6, 5, 4, 3, 2, 1}; minMAX.sort(x); // x 已原地排序为 {1, 2, 3, 4, 5, 6, 7, 8, 9} } }
第四步:如需自定义比较逻辑,可参考仓库中的单元测试文件进行扩展。
适用人群
- 对排序算法感兴趣的学生和研究人员
- 需要快速集成轻量排序能力的 Java 开发者
- 希望了解如何通过并行化思路优化 O(n²) 基础算法的学习者
出品方
Jod Enghog(独立开发者),项目采用 GPL v3.0 开源许可。
评论与建议
登录 后参与评论或提建议