A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 雷丹 中级黑马   /  2013-10-24 15:28  /  1286 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

怎么分别用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技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
好,加油!

评分

参与人数 1黑马币 +6 收起 理由
狼王 + 6 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马