合并插入排序和合并排序



我正在考虑优化当前的排序算法。为了使过程更快,我想使用线程并将数组分为两部分。使用插入对两个数组进行排序,同时使用线程进行排序,并等待它们完成。之后使用气泡排序合并这两个数组。你认为,使用这个算法,排序会更快吗?

不,在一般情况下,这不会更快。例如,假设您的初始数组如下所示:

[9,5,7,6,8,3,2,0,4,1]

将两半排序后,它看起来像这样:

[5,6,7,8,9,0,1,2,3,4]
使用气泡排序对其进行排序不会

比使用气泡排序对初始数组进行排序快得多。插入排序加上冒泡排序所花费的总时间几乎肯定会比仅使用单个线程对初始数组进行排序所花费的时间更多。

冒泡排序和插入排序都不是特别适合并行化。最好实现并行快速排序。或者,如果您坚持在线程中使用插入排序,请使用合并来组合排序的子数组。当然,合并需要 O(n( 额外的内存。

No.您的方法不会比已知的并行排序算法方法更快。插入排序是O(n^2)的,如果应用,除非代码更加并行化,否则不会产生更好的结果。鉴于我假设您只有 two 个线程需要优化:最好是将Merge sort与两个线程一起使用,这将有助于在最坏情况下O(nlogn)。我不知道你为什么要学习双线程并行性,但从以下资源中学习可能会让你掌握多线程排序的并行算法的诀窍:
http://www.dcc.fc.up.pt/~fds/aulas/PPD/1112/sorting.pdf

最新更新