package methods;
public class MergeSort {
public static int[] sort(int[] x,int start,int end)
{
if(start == end)
{
int[] ret=new int[1];
ret[0]=x[start];
return ret;
}
else if(start +1 == end)
{
int[] ret=new int[2];
ret[0] = Math.min(x[start], x[end]);
ret[1] = Math.max(x[start], x[end]);
return ret;
}
else
{
int mid=(start+end)/2;
int[] left=sort(x,start,mid);
int[] right=sort(x,mid+1,end);
return merge(left,0,left.length-1, right,0,right.length-1);
}
}
public static int[] merge(int[] x,int xStart,int xEnd, int[] y, int yStart, int yEnd)
{
int retLen=(xEnd-xStart+1) + (yEnd-yStart+1);
int i=xStart, j=yStart, k=0;
int[] ret=new int[retLen];
for(;k<retLen;k++)
{
if(i<=xEnd && j<=yEnd)
{
if(x[i] < y[j])
{
ret[k]=x[i];
i++;
}
else
{
ret[k]=y[j];
j++;
}
}
else if(i <= xEnd)
{
ret[k] = x[i];
i++;
}
else //j<yEnd
{
ret[k]= y[j];
j++;
}
}
return ret;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] x=new int[11];
for(int i=0;i<11;i++)
{
x[i]=(int)(Math.random()*100.0);
}
System.out.println("排序前:");
for(int i=0;i<11;i++)
System.out.print(x[i]+" ");
int[] y=MergeSort.sort(x,0,x.length-1);
System.out.println("\r\n排序后:");
for(int i=0;i<11;i++)
System.out.print(y[i]+" ");
}
}
练习——合并排序
最新推荐文章于 2022-12-19 20:39:12 发布