java线程排序_Java中的并发排序

我目前正在开发一个程序来同时对字符串进行排序.我的程序接收一个文件,将文件的每一行读入一个数组,并将字符串数组拆分成较小的字符串数组.然后,程序为每个较小的数组启动一个线程,并对它们进行快速排序.每个线程完成对其数组的排序后,主线程将收集线程对象的所有结果.然后应该将较小的,现在排序的数组合并为一个大的排序数组.

我知道我的快速排序实现有效 – 使用一个线程程序对单词进行排序.我需要的是一种将线程返回的数组嵌套在一起的算法.

任何帮助表示赞赏 – 提前谢谢.

解决方法:

从mergesort的最终合并过程开始.您读取每个m个数组的第一个值(最小的单个子数组),然后选择m个读取值的最小值(全局最小值),将其推入结果中并且从包含数组中删除它或将相应的索引递增1.然后,迭代直到所有子数组都为空,或者所有索引都已到达相应数组的末尾.

注意:如果您有一个非常大的数据集(它实际上用于处理这种情况),这可能会减少内存使用量,但由于分割成本(如果您复制子阵列变为线性),可能会比原始Quicksort表现更差,并且多线程开销.考虑到应用于大型数组时,inges Mergesort更节省空间.还要考虑编写Quicksort的用户可能花时间优化调用和分支执行.

这是基本的理论CS,但请注意,只能通过使用并行性来降低计算复杂度,只能获得线性加速度.最后,Quicksort恰好达到了比较排序算法的平均复杂度的下限:如果你试图超越Quicksort O(nlog(n)),我会给你带来坏消息.

标签:java,sorting,concurrency

来源: https://codeday.me/bug/20190612/1229240.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值