我在考虑优化当前的排序算法。为了使这个过程更快,我想到了使用线程并将数组分成两部分。使用线程同时使用插入排序对两个数组进行排序,并等待它们完成。之后使用冒泡排序来合并该数组。你认为,使用这种算法,排序会更快吗?
答案 0 :(得分:1)
不,在一般情况下,这不会更快。例如,想象一下,您的初始数组如下所示:
[9,5,7,6,8,3,2,0,4,1]
对两半进行排序后,它看起来像这样:
[5,6,7,8,9,0,1,2,3,4]
使用冒泡排序对其进行排序不会比使用冒泡排序对初始数组进行排序要快得多。插入排序加上冒泡排序所经过的总时间几乎肯定会超过你用单个线程对初始数组进行排序的时间。
冒泡排序和插入排序都不特别适合并行化。您最好实施并行快速排序。或者,如果您坚持在线程中使用插入排序,请使用合并来组合排序的子数组。当然,合并需要额外的O(n)内存。
答案 1 :(得分:0)
没有。您的方法不会比并行排序算法的已知方法更快。插入排序为O(n^2)
,如果应用不会产生更好的结果,除非代码更多并行化。鉴于我假设您只有two
个线程需要优化:最好使用Merge sort
两个线程,这将有助于最坏情况O(nlogn)
。我不知道你为什么要学习两个线程并行,但是从以下资源中学习可能会让你获得多线程中并行排序算法的诀窍:
http://www.dcc.fc.up.pt/~fds/aulas/PPD/1112/sorting.pdf