怎么分别用8个线程、4个线程、2个线程、1个线程来解决二路归并排序
注意需要设主控线程
归并算法如下 import java.util.Arrays;  
import java.util.*;
public class MergeSort {  
  
       public static void mergeSort(int[] data){  
        System.out.println("开始排序:");  
        sort(data,0,data.length-1);  
    }  
    /*将索引从left到right范围的数组元素进行归并排序 
     * data 待排序数组 
     * left 待排序数组的第一个元素索引 
     * right 待排序数组的最后一个元素索引 
     */  
    private static void sort(int[] data, int left, int right) {  
        if(left<right){  
            //找出中间索引  
            int center=(left+right)/2;  
            //对左边数组进行递归  
            sort(data,left,center);  
            //对右边数组进行递归  
            sort(data,center+1,right);  
            //合并  
            merge(data,left,center,right);  
             
        }  
    }  
    /*将两个数组进行归并,归并前两个数组已经有序,归并后依然有序 
     * data 数组对象 
     * left 左数组的第一个元素的索引 
     * center 左数组的最后一个元素的索引,center+1是右数组第一个元素的索引 
     * right 右数组的最后一个元素的索引 
     */  
    private static void merge(int[] array, int left, int center, int right) {  
        int [] tmpArr=new int[array.length];  
        int mid=center+1;  
        //third记录中间数组的索引  
        int third=left;  
        int tmp=left;  
        while(left<=center&&mid<=right){  
            //从两个数组中取出最小的放入中间数组  
            if(array[left] <= array[mid]){  
                tmpArr[third++]=array[left++];  
            }else{  
                tmpArr[third++]=array[mid++];  
            }  
        }  
        //剩余部分依次放入中间数组  
        while(mid<=right){  
            tmpArr[third++]=array[mid++];  
        }  
        while(left<=center){  
            tmpArr[third++]=array[left++];  
        }  
        //将中间数组中的内容复制回原数组  
        while(tmp<=right){  
            array[tmp]=tmpArr[tmp++];  
        }  
        System.out.println(Arrays.toString(array));  
    }  
    public static void main(String[] args) {  
        int[] data = {4,10,20,1,-9,6}; 
        System.out.println("排序之前:\n"+Arrays.toString(data)); 
        mergeSort(data);   
        System.out.println("排序之后:\n"+Arrays.toString(data));  
    }  
  

多线程

解决方案 »

  1.   

    几个线程就是事先将数据平均分成几份,2个线程2份,4个线程4份,8个线程8份,类似的
    最后统一归并
      

  2.   

    嗯,是把数据分为几份,但是每个线程归并排序之后,得到的几部分小数组怎么合并在一起?
      

  3.   

    还是没有解决?哪位大神帮忙实现下吧。谢了
      

  4.   

    两两合并,那样就可以无视与原来合并算法的差异