我目前正在开发一个程序来同时对字符串进行排序.我的程序接收一个文件,将文件的每一行读入一个数组,并将字符串数组拆分成较小的字符串数组.然后,程序为每个较小的数组启动一个线程,并对它们进行快速排序.每个线程完成对其数组的排序后,主线程将收集线程对象的所有结果.然后应该将较小的,现在排序的数组合并为一个大的排序数组.
我知道我的快速排序实现有效 – 使用一个线程程序对单词进行排序.我需要的是一种将线程返回的数组嵌套在一起的算法.
任何帮助表示赞赏 – 提前谢谢.
解决方法:
从mergesort的最终合并过程开始.您读取每个m个数组的第一个值(最小的单个子数组),然后选择m个读取值的最小值(全局最小值),将其推入结果中并且从包含数组中删除它或将相应的索引递增1.然后,迭代直到所有子数组都为空,或者所有索引都已到达相应数组的末尾.
注意:如果您有一个非常大的数据集(它实际上用于处理这种情况),这可能会减少内存使用量,但由于分割成本(如果您复制子阵列变为线性),可能会比原始Quicksort表现更差,并且多线程开销.考虑到应用于大型数组时,inges Mergesort更节省空间.还要考虑编写Quicksort的用户可能花时间优化调用和分支执行.
这是基本的理论CS,但请注意,只能通过使用并行性来降低计算复杂度,只能获得线性加速度.最后,Quicksort恰好达到了比较排序算法的平均复杂度的下限:如果你试图超越Quicksort O(nlog(n)),我会给你带来坏消息.
标签:java,sorting,concurrency
来源: https://codeday.me/bug/20190612/1229240.html