# SortBoys **Repository Path**: dahunter/sort-boys ## Basic Information - **Project Name**: SortBoys - **Description**: 排序算法 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-11-07 - **Last Updated**: 2022-11-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Sort Boys 李强、高宝宇、狄虎三位同学实现的排序算法。包括:`选择排序`,`归并排序`,`快速排序`,`希尔排序`,`基数排序` 1. 基于java实现了上述五种算法的单机版本和多线程模拟分布式版本。 2. 基于C语言实现了上述五种算法的大数版本排序(数值的范围在 [-10^100 , 10^100]) # 代码目录 ``````│ .gitignore │ README.md │ 程序设计大作业--排序算法.pptx //大作业PPT │ ├─big_data_sort //C预言实现大数排序 │ │ big_data_sort.c // 大数排序主文件 │ │ Makefile // Makefile │ └─sort │ │ sort_core.c // 排序核心模块 │ │ select_sort.c // 选择排序 │ │ merge_sort.c // 归并排序 │ │ quick_sort.c // 快速排序 │ │ shell_sort.c // 希尔排序 │ │ radix_sort.c // 基数排序 │ │ sort.h // 排序头文件 │ └─time_code │ time_code.c // 计时模块源文件 │ time_code.h // 计时模块头文件 │ ├─dataset // 待排序数据集 │ B_10w // 大数版本,10万个数据,大数范围:[-10^100,10^100] │ B_1b // 大数版本,100个数据 │ B_1k // 大数版本,1千个数据 │ B_1w // 大数版本,1万个数据 │ n_100w // int数据版本,100万个数据,int范围:[-2^31,2^31-1] │ n_10w // int数据版本,10万个数据 │ n_1k // int数据版本,1千个数据 │ n_1w // int数据版本,1万个数据 │ n_500w // int数据版本,500万个数据 │ └─java_sort // java实现的单机排序和分布式排序 │ pom.xml // maven依赖项,只引入了jdk8 └─src └─main └─java │ ├─sort // 单机版排序算法 │ SelectSort.java // 选择排序 │ MergeSort.java // 归并排序 │ QuickSort.java // 快速排序 │ RadixSort.java // 基数排序 │ ShellSort.java // 希尔排序 │ ├─dstbsort // 分布式排序算法 │ DstbMergeSort.java // 分布式归并排序 │ DstbQuickSort.java // 分布式快速排序 │ DstbRadixSort.java // 分布式基数排序 │ DstbShellSort.java // 分布式希尔排序 │ └─utils //工具类 CreatDataUtils.java //生成待排序数据的工具类 FileUtils.java //文件加载,写入工具类 SortUtils.java // 验证排序结果正确性的工具类 `````` # 运行环境 ## big_data_sort 部分 make gcc ## java_sort 部分 jdk == 1.8 maven >= 3.0 # 使用方法 ## big_data_sort 部分 进入big_data_sort目录后执行make操作,运行./big_data_sort 可查看使用方法: usage:./big_data_sort \ \ \ \ input file: 待排序文件 output file: 需保存的排序后文件 type: select merge quick shell radix type: select type: size: 待排序文件规模大小 清理环境可执行make clean ## java_sort部分 src.main.java 中的 sort 和dstbsort 包中所有的类中都有main方法,直接运行main方法即可。 # 算法分析 详细分析请见《程序设计大作业--排序算法.pptx》 ## 算法对比 | 排序方法 | 平均情况 | 最好情况 | 最坏情况 | 稳定性 | | -------- | ------------------- | ------------------- | ------------------- | ------ | | 选择排序 | $O(n^2)$ | $O(n^2)$ | $O(n^2)$ | 不稳定 | | 归并排序 | $O(n\log_{2}{n})$ | $O(n\log_{2}{n})$ | $O(n\log_{2}{n})$ | 稳定 | | 快速排序 | $O(n\log_{2}{n})$ | $O(n\log_{2}{n})$ | $O(n^2)$ | 不稳定 | | 希尔排序 | $O(n^{1.3})$ | $O(n\log_{2}{n})$ | $O(n^2)$ | 不稳定 | | 基数排序 | $O(d(n+k))$ | $O(d(n+k))$ | $O(d(n+k))$ | 稳定 | ## 实际代码性能 备注:单位ms, 由于运行设备性能差异,数据仅供参考 ### 单机版本 | 数据集大小 | 选择排序 | 归并排序 | 快速排序 | 希尔排序 | 基数排序 | | ---------- | -------- | -------- | -------- | -------- | -------- | | 1k | 4 | 1 | 1 | 6 | 4 | | 1w | 52 | 4 | 2 | 190 | 24 | | 10w | 4105 | 17 | 21 | 6660 | 100 | | 100w | 383259 | 136 | 119 | 686811 | 1100 | ### 大数版本 | **数据规模** | **选择排序** | **归并排序** | **快速排序** | **希尔排序** | **基数排序** | | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | | 1k | 10 | 0.3 | 0.5 | 13 | 0.6 | | 1w | 1072 | 4 | 7 | 1699 | 7 | | 10w | 170134 | 77 | 105 | 445192 | 218 | ### 分布式版本 | 数据集大小 | 归并排序 | 快速排序 | 希尔排序 | 基数排序 | | ---------- | -------- | -------- | -------- | -------- | | 100w | 212 | 93 | 1337 | 1083 | | 500w | 434 | 338 | 10101 | 7552 | # 支持我们 如果你觉得项目还不错,记得 Star 支持一下噢!你们的支持真的很重要! # 联系我们 如果想要反馈 Bug、提供产品意见,可以创建一个 [Github issue](https://gitee.com/link?target=https://gitee.com/dahunter/sort-boys/issues) 联系我们,十分感谢!