多路归并排序
来源:互联网 发布:阿里巴巴怎么传淘宝 编辑:程序博客网 时间:2024/06/05 02:53
在数据结构的课程中,我们都学习过归并排序,当时的归并排序都是采用二路归并的;但是在外部排序中,一般会采用多路归并;因为经典的二路归并IO的次数要比多路归并多很多,所以对算法的性能影响会很大;下面是笔者实现的一个多路归并排序算法。
import java.util.ArrayList;public class MultipleMerge {public static void main(String[] args) {int[] a = {1, 4, 7, 9, 10};int[] b = {-1, 5, 23, 89};int[] c = {-22, 2, 3, 90};int[] d = {-100, -80, 100, 345, 1000};ArrayList<Integer> result = new ArrayList<Integer>();multipleMerge(result, a, b, c, d);System.out.println(result);}public static void multipleMerge(ArrayList<Integer> result, int[] ... arrays){if(result == null)return;int[] num = new int[arrays.length];int[] idx = new int[arrays.length];for(int i = 0; i < arrays.length; i++){if(arrays[i] == null || arrays[i].length == 0)return;num[i] = arrays[i][0];idx[i] = 0;}int n = arrays.length;while(n > 0){int i = getMinIndex(num);result.add(num[i]);if(idx[i] == arrays[i].length-1){n--;num[i] = Integer.MAX_VALUE;}else{idx[i]++;num[i] = arrays[i][idx[i]];}}}private static int getMinIndex(int[] num){int min = Integer.MAX_VALUE;int index = -1;for(int i = 0; i < num.length; i++){if(num[i] < min){min = num[i];index = i;}}return index;}}上述代码其实还可以进一步优化,在getMinIndex时,时间复杂度是O(N),但如果采用败者树,则时间复杂度可以提高到log(N)
0 0
- 多路归并排序
- 多路归并排序
- 多路归并排序
- 多路归并排序
- 多路归并排序
- 多路归并排序
- 数据结构 外部排序 多路归并排序
- 归并排序:二路归并
- 归并排序--二路归并
- 归并排序(2-路归并排序)
- 归并排序、二路归并排序
- 位图排序、多路归并排序-应对磁盘文件排序
- 二路和多路归并排序
- 多路归并排序【JAVA实现】
- 大数据多路归并排序
- 败者树 多路归并排序
- 大数据多路归并排序
- 大数据多路归并排序
- 有关cookie的httponly属性相关
- android View实现变暗效果
- [BAT]批处理安装Java并配置环境变量
- 一、Java调用C/C++代码
- Linux移植(2)启动文件
- 多路归并排序
- Java中urlrewrite伪静态的使用总结
- 二、C++访问Java代码-知识点
- Spring3.x--通过构造器注入
- 图像阈值分割(二值化)
- QT5与QT4的一些不同之处
- 自定义 searchResultsTableView的样式
- PHP通过cURL访问https时出现SSL certificate problem: unable to get local issuer certificate的解决方法
- poj3342 poj2342 树形dp入门