📄 mergesort.java
字号:
public class MergeSort {
public static void mergeSort(Comparable[] a)
{
Comparable[] b=new Comparable[a.length];
int s=1;
while (s<a.length) {
mergePass(a,b,s); // 合并到数组b
s+=s;
mergePass(b,a,s); // 合并到数组a
s+=s;
}
}
public static void mergePass(Comparable[] x,Comparable[] y,int s)
{ // 合并大小为s的相邻数组
int i=0;
while (i<=x.length-2*s)
{// 合并大小为s的相邻2段子数组
merge(x,y,i,i+s-1,i+2*s-1);
i=i+2*s;
}
// 剩下的元素个数少于2s
if (i+s<x.length)
merge(x,y,i,i+s-1,x.length-1);
else
// 复制到y
for (int j=i;j<x.length;j++)
y[j]=x[j];
}
public static void merge(Comparable[] c, Comparable[] d,
int L,int m,int r)
{//合并c[L:m]和c[m+1:r]到d[L:r]
int i=L,
j=m+1,
k=L;
while ((i<=m) && (j<=r))
if (c[i].compareTo(c[j])<=0)
d[k++]=c[i++];
else
d[k++]=c[j++];
if (i>m)
for (int q=j;q<=r;q++)
d[k++]=c[q];
else
for (int q=i;q<=m;q++)
d[k++]=c[q];
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -