合并排序(仅合并)将无法成功合并数组的最后一部分

时间:2016-11-11 22:18:42

标签: java arrays sorting mergesort

我正在编写一个程序,它对一个随机整数数组并行执行计数排序。一旦完成并完成所有线程,我必须将现在排序的数组部分合并为一个完全排序的数组。

例如:{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];
        }

0 个答案:

没有答案