//排序-分治法
public class Divide
{
public static int [] A = {1,56,234,4,2,43,5,464,413,9,45,737,56,2364,4,2,43,35,44,43,19,425,717};
public static int p,q,r,m;
public static void main(String args[])
{
p = 0;
r = A.length;
merge_sort(A,p,r);
//显示最终结果
for(m = 0; m < A.length; m++)
{
System.out.println(A[m]);
}
}
static void merge_sort(int A[], int p, int r)
{
if (p<r)
{
q = (int)((r+p)/2); //计算分组的中间数
if ((r-p)>8)//设定分组的最小元素个数
{
merge_sort(A,p,q);//第一组
merge_sort(A,q+1,r);//第二组
}
merge(A,p,q,r); //使用插入排序进行合并
//显示过程
for(m = p; m < r; m++)
{
System.out.println(A[m]);
}
System.out.println("\n*************************************************\n");
//
}
}
//使用插入排序进行合并
static void merge(int A[], int p, int q, int r)
{
int i,j,key;
for(j=p;j<r;j++)
{
key = A[j];
i = j-1;
while(i > 0 && A[i] > key)
{
A[i+1] = A[i];
A[i] = key;
i--;
}
}
}
}