多线程堆排序

问题描述 投票:0回答:1

我需要使用 C# 多线程改进一般堆排序
我对实施改进没有明确的想法。

我得到的建议之一是将 N 部分的数组分开,并在特定线程中对每个部分进行堆排序。
然后合并数组的每个有序部分。
在这种情况下,我认为它不会那么有效,因为使用堆排序后合并到通用流中。

你能提出其他想法吗?
或者也许如果它效率不高,您有什么想法如何以不同的方式在堆排序中使用多线程吗?

c# multithreading algorithm sorting heapsort
1个回答
0
投票

我很难相信多线程不会带来比这里值得的更多的开销。

不过,我还是会这样想。每个线程对一块数据进行堆排序。然后对块进行堆排序合并。您的块堆按将使用的下一个值排序。因此,您取出一个块,将值添加到排序列表中,将块中的指针移动一位,然后将其添加到堆中。

如果您擅长构建管道,那么您应该能够在各个堆排序正在进行时启动堆合并。但很有可能上下文切换太重量级,以至于无法正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.