Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 多线程计数排序_Sorting_Counting_Partition - Fatal编程技术网

Sorting 多线程计数排序

Sorting 多线程计数排序,sorting,counting,partition,Sorting,Counting,Partition,我有一个大学作业,要求我用Java编写带有n个线程的计数排序算法。我们还没有得到更多的信息。我认为最好的方法是将数组划分为n个部分,然后每个线程对一个部分进行排序。问题是我不确定如何正确划分数组;我只看到了如何划分为2个部分的示例,而不是n个部分 如果有人能像我解释的那个样为我提供关于如何划分它的逻辑,或者提供一些伪代码,我将不胜感激。没有源代码,这是我必须做的作业 我对实际的排序没有问题,只是分区 谢谢。我想到的第一个想法是递归地对数组进行分区。也就是说,如果你可以划分为2,你也可以划分为4,

我有一个大学作业,要求我用Java编写带有n个线程的计数排序算法。我们还没有得到更多的信息。我认为最好的方法是将数组划分为n个部分,然后每个线程对一个部分进行排序。问题是我不确定如何正确划分数组;我只看到了如何划分为2个部分的示例,而不是n个部分

如果有人能像我解释的那个样为我提供关于如何划分它的逻辑,或者提供一些伪代码,我将不胜感激。没有源代码,这是我必须做的作业

我对实际的排序没有问题,只是分区


谢谢。

我想到的第一个想法是递归地对数组进行分区。也就是说,如果你可以划分为2,你也可以划分为4,对吗


一种更先进、更现代的方法是划分成比线程或进程多得多的部分。然后将这些部分动态地分配给线程。

我想到的第一个想法是递归地划分数组。也就是说,如果你可以划分为2,你也可以划分为4,对吗

一种更先进、更现代的方法是划分成比线程或进程多得多的部分。然后将这些部分动态分配给线程。

定义 假设您有一个数组a[0..n-1]要排序,并且希望使用k个线程进行排序

为简单起见,假设最小的元素的值为0,最大的元素的值为m。如果最小值不等于0,则可以在将元素指定给线程期间缩放值

分裂成线 将数组划分为k个块,每个块最多由floorm/k+1个不同的元素值组成

第i块由元素a[j]组成,以便:

i-1*地板/k+1定义 假设您有一个数组a[0..n-1]要排序,并且希望使用k个线程进行排序

为简单起见,假设最小的元素的值为0,最大的元素的值为m。如果最小值不等于0,则可以在将元素指定给线程期间缩放值

分裂成线 将数组划分为k个块,每个块最多由floorm/k+1个不同的元素值组成

第i块由元素a[j]组成,以便:


i-1*floorm/k+1我已经尝试过了,但是我不确定如何正确地划分它们。例如,我有一个数组:{37,1,27,11,15,12,34,29,4,10}。划分后我得到:{10,1,4,11,15,12,34,29,27,37}轴心点是平均值。我做得对吗?@Mr_Bean:你重新安排了数组而不是分区,至少我不会称之为分区。无论如何。将结果想象为两个数组:{1,4}和{11,15,12,34,29,27,37}。枢轴元件10可以添加两个或两个。然后对新数组重复该操作。同时查找合并排序…哦,好的,谢谢。我看到了一个实现,在这个实现中,他们重新排列了阵列,使分区大小相同,或者缩小了1。我已经试过了,但是我不知道如何正确地划分它们。例如,我有一个数组:{37,1,27,11,15,12,34,29,4,10}。划分后我得到:{10,1,4,11,15,12,34,29,27,37}轴心点是平均值。我做得对吗?@Mr_Bean:你重新安排了数组而不是分区,至少我不会称之为分区。无论如何。将结果想象为两个数组:{1,4}和{11,15,12,34,29,27,37}。枢轴元件10可以添加两个或两个。然后对新数组重复该操作。同时查找合并排序…哦,好的,谢谢。我看到了一个实现,在这个实现中,他们重新排列了阵列,使分区大小相同,或者缩小了1。我来试试。谢谢,非常有帮助。关于块大小的问题:您说过每个块都有floorm/k+1元素。在您的示例中,这将是3个元素。但是,您的块有4个。有什么地方出错了吗?是的,是个错误。现在修好了。谢谢,非常有帮助。关于块大小的问题:您说过每个块都有floorm/k+1元素。在您的示例中,这将是3个元素。但是,您的块有4个。有什么地方出错了吗?是的,是个错误。现在修好了。
chunk_1: elements in range [0,3) -> [1, 2, 0, 2]
chunk_2: elements in range [3,6) -> [5, 3, 3, 4]
chunk_3: elements in range [6,9) -> [6, 7]