多线程应用程序的最佳排序

Rav*_*vi 8 c++ sorting multithreading

今天在一次采访中,我有一个问题,询问你使用哪种多线程应用程序.天气是合并排序或快速排序.

Yoc*_*mer 8

您对多线程应用程序使用合并排序.

原因:

合并排序将问题分成单独的较小问题(较小的数组),然后合并它们.这可以在单独的线程中完成.

快速排序在单个数组上进行数据透视排序,因此在线程之间更有效地划分问题.

  • 两者都可以有效地实现多线程,在mergesort中任务的划分会更简单,但是你可以通过获取一个pivot来应用quicksort,应用第一次迭代,之后所有小于pivot的元素都放在*pivot之前在数组中并且所有在枢轴之后放置*.然后使用两个线程来对数组的两边进行排序...合并排序仍然更容易实现,任务划分将更加均匀,因此潜在的收益更高(如果你可以节省一点内存). (2认同)

小智 3

合并排序似乎更容易并行化和分发......想一想,您将其分解为可以轻松划分和分发的干净的子问题。但话又说回来,快速排序也是如此。但是,我可能更喜欢使用合并排序来完成它,因为它可能会更容易。