# 合并排序-多线程算法

``````package com.data.struct;

import java.util.concurrent.CountDownLatch;

private static void mergeSort(int [] source,int left,int right,CountDownLatch cdl){
if(left==right){
cdl.countDown();
cdl.countDown();
return ;
}else{
int middle=(left+right)/2;
t1.start();
t2.start();
try {
cdl.await();
} catch (InterruptedException e) {

}

int[]tmp=new int[right-left+1];
int l=0;
int lindex=left;
int rindex=middle+1;
for(;lindex<=middle;){
if(rindex>right){
break;
}
if(source[lindex]<source[rindex]){
tmp[l++]=source[lindex];
lindex++;
}else{
tmp[l++]=source[rindex];
rindex++;
}
}
if(lindex==middle+1&&rindex<=right){
for(;rindex<=right;rindex++){
tmp[l++]=source[rindex];
}
}
if(rindex>right&&lindex<=middle){
for(;lindex<=middle;lindex++){
tmp[l++]=source[lindex];
}
}

l=0;
for(int x=left;x<=right;x++){
source[x]=tmp[l++];
}

for(int i=0;i<source.length;i++){
System.out.print(source[i]+" ");
}
System.out.println();

}

}

private int[]A;
private int p;
private int r;
private CountDownLatch cdl;
this.A=A;
this.p=p;
this.r=r;
this.cdl=cdl;
}
@Override
public void run() {
CountDownLatch c=new CountDownLatch(2);
mergeSort(A,p,r,c);
try {
c.await();
} catch (InterruptedException e) {
e.printStackTrace();
}

this.cdl.countDown();
}

}
public static void main(String[] args) {
int[] data=new int[]{4,5,2,9,1,0,7};
for(int i=0;i<data.length;i++){
System.out.print(data[i]+" ");
}
System.out.println();
CountDownLatch cd=new CountDownLatch(2);
mergeSort(data,0,data.length-1,cd);;
try {
cd.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
for(int i=0;i<data.length;i++){
System.out.print(data[i]+" ");
}
System.out.println();

}

}
``````

原文作者：排序算法
原文地址: https://blog.csdn.net/hxpjava1/article/details/23797577
本文转自网络文章，转载此文章仅为分享知识，如有侵权，请联系博主进行删除。