来源:公众号【编程珠玑】
作者:守望先生
ID:shouwangxiansheng
在《系统编程-多线程》中已经了解了多线程的一些特点,其中包括快!那么今天就来看看如何利用多线程来排序。
思路
我们的思路是这样的:
-
假设有N个线程,则将数组数M据分为N组
-
每个线程对其中的一组数据使用库函数提供的快速排序算法
-
所有线程排序完成后,将每组排序好的数组合并
举个例子,使用4个线程对11个数据进行排序:
12,10,4,7,9,6,8,1,5,16,11
由于4不能被10整除,因此,前面三个线程,每个负责排序10%(4-1)= 3三个数,最后一个线程负责排序最后两个数。
假设这4个线程都完成了自己的工作后,内容如下:
比较每组的第一个,选出最小的一个,这里是线程2的1,放到新数组的下标0处最后由主线程将已经排好的每组进行合并:
-
将1放到新的数组最开始的位置,线程的下次计较的内容后移,即下次比较时,比较线程2的第二个数。
-
循环比较
最终可以得到合并的数据:
1 4 5 6 7 8 9 10 11 12 16
屏障
通过上面的分析,我们需要多