我正在编写一个程序,它对一个随机整数数组并行执行计数排序。一旦完成并完成所有线程,我必须将现在排序的数组部分合并为一个完全排序的数组。
例如:{1,3,9,12,2,4,7,8}进入{1,2,3,4,7,8,9,12}
我的排序有效,输出就像是这样尝试使用两个线程进行合并排序(有效)但我希望能够使用两个以上:
Sorted Array: 1 1 1 4 5 6 6 6 8 9 1 1 3 4 5 5 5 5 8 9
Merged Final: 1 1 1 1 1 3 4 4 5 5 5 5 5 6 6 6 6 8 9 9
这是使用两个线程,我无法弄清楚如何实现我的合并部分以容纳2个以上的线程。我知道我可以操纵它以允许它,但我似乎无法做到这一点。这是我尝试使用三个线程排序长度为21的数组并且每个线程对一个长度为7的子部分进行排序时所得到的。这里我无法合并最后7个字符。每个小节都经过适当的分类。
Unsorted Array: 75 43 20 65 36 25 78 64 5 1 90 8 59 3 88 69 47 11 91 26 0
Sorted Array: 1 3 5 8 20 25 36 43 59 64 65 75 78 90 0 0 0 0 0 0 0
这是代码的合并部分:
//merging the subsections into final sorted array
int[] temp = new int[data.length]; //temp array, data would not work if i tried to overwrite it
int i = 0;//increment for one subsection
int j = i + subLength;//increment for another subsection
int x = 0;//increment for location in temp array
while (i < subLength && j < subLength*2) {
if (data[i] < data[j]) {
temp[x] = data[i];
i++;
} else {
temp[x] = data[j];
j++;
}
x++;
}
while( i < subLength){ //getting remaining values from arrays
temp[x++] = data[i++];
}
while( j < subLength*2){//getting remaining values from arrays
temp[x++] = data[j++];
}
//putting temp array back into data array
for (lcv = 0; lcv < data.length ; lcv++) {
data[lcv] = temp[lcv];
}