黑马程序员技术交流社区

标题: java多线程问题 [打印本页]

作者: 雷丹    时间: 2013-10-24 15:28
标题: java多线程问题
怎么分别用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));  
    }  
  
}
作者: 漫步人    时间: 2013-10-24 16:34
好,加油!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2