快速排序java并行实现
来源:互联网 发布:linux下打开文件命令 编辑:程序博客网 时间:2024/05/03 11:28
public class And extends Thread{
private int[] A;
private int first;
private int end;
public And(int[] A,int first,int end){
super();
this.A=A;
this.first=first;
this.end=end;
}
public void run(){
quickSort(A,first,end);
}
public void quickSort(int[] A, int first, int end)
{
int i = first, j = end;
int tmp;
if (first < end)
{
tmp = A[first];
while (i != j)
{
while (j > i && A[j] >= tmp)
j--;
A[i] = A[j];
while (i < j && A[i] <= tmp)
i++;
A[j] = A[i];
}
A[i] = tmp;
quickSort(A, first, i - 1);
quickSort(A, i + 1, end);
}
}
public void merge(int MAX, int[] a, int[] b, int[] c)//将b[]和c[]进行归并排序,放入a[]数组里面
{
int m = 0, n = 0, k;
for (k = 0; k < MAX; k++)
{
if (m < MAX / 2 && n < MAX / 2)
{
if (b[n] <= c[m])
{
a[k] = b[n];
n++;
}
else
{
a[k] = c[m];
m++;
}
}
if (m == MAX / 2 || n == MAX / 2)
{
if (m == MAX / 2)
a[k] = c[m - 1];
else
a[k] = b[n - 1];
k += 1;
break;
}
}
if (n < MAX / 2)
{
int tem = MAX / 2 - n;
for (int p = 0; p < tem; p++)
{
a[k] = b[n];
n++;
k++;
}
}
else if (m < MAX / 2)
{
int tem = MAX / 2 - m;
for (int q = 0; q < tem; q++)
{
a[k] = c[m];
m++;
k++;
}
}
}
public static int MAX=70000;
public static int MAXN=MAX/2;
public static void main(String[] args) throws InterruptedException {
int buf[]=new int[MAX+2];
int a[]=new int[MAX+2];
int b[]=new int[MAXN+2];
int c[]=new int[MAXN+2];
for(int i=0;i<MAX;i++){
buf[i]=(int)(Math.random()*10+1);
a[i]=buf[i];
//System.out.print(buf[i]+" ");
}
System.out.println();
for(int i=0;i<MAXN;i++){
b[i]=a[i];
c[i]=a[i+MAXN];
}
And thread1=new And(b,0,MAXN-1);
And thread2=new And(c,0,MAXN-1);
long startTime=System.currentTimeMillis();
thread1.start();
thread2.start();
thread1.join();
thread2.join();
And and=new And(a,0,MAX-1);
and.merge(MAX, a, b, c);
long endTime=System.currentTimeMillis();
//for(int i=0;i<MAX;i++){
//System.out.print(a[i]+" ");
//}
System.out.println();
long time1=endTime-startTime;
System.out.println("并行时间="+time1);
startTime=System.currentTimeMillis();
And serial=new And(buf,0,MAX-1);
serial.quickSort(buf,0,MAX-1);
//for(int i=0;i<MAX;i++){
//System.out.print(buf[i]+" ");
//}
System.out.println();
endTime=System.currentTimeMillis();
//System.out.println("串行结果="+sum);
long time2=endTime-startTime;
System.out.println("串行时间="+time2);
System.out.printf("加速比为%.2f",(time2*1.0/time1));
}
}
0 0
- 快速排序java并行实现
- erlang 实现并行快速排序
- 利用OpenMP实现并行快速排序算法
- 并行快速排序
- 并行快速排序
- Erlang 并行快速排序
- java实现快速排序
- 快速排序Java实现
- 快速排序java实现
- 快速排序JAVA实现
- Java实现快速排序
- 快速排序--Java实现
- 快速排序java实现
- java实现快速排序
- java实现快速排序
- Java实现快速排序
- Java实现快速排序
- 快速排序java实现
- 电商的时代已经来临,您是否想出航,? 海川电商为你起航护驾。
- C++第5次作业
- c++实验5
- Find a way (广搜(水))
- js正则表达式匹配特殊字符
- 快速排序java并行实现
- jsp 函数
- POS终端管理功能
- 不等式数列 百度2017春招笔试
- 使用Docker部署Spring Boot 应用 Dockerfile方式
- iOS 两种系统分享(配Demo下载)UIActivityViewController 和 SLComposeViewController
- c++实验5:数组分离
- c++实验5-求和
- web.xml配置中的servlet及servlet-mapping