【java实现】算法导论之归并排序

/*
 * 算法导论2.3-2 java实现
 * 重写过程MERGE,使之不使用哨兵,而是一旦数组L或R的所有元素均被复制回A就立刻停止,然后把另一个数组的剩余部分复制回A。
 */
public class MERGE_SORT {


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] A={3,41,52,26,38,57,9,49};
System.out.print("待排序数组为:");
for(int i=0;i System.out.print(A[i]+"\t");
}
Merge_sort(A,0,A.length-1);
System.out.println();
System.out.print("排好序的数组为:");
for(int i=0;i System.out.print(A[i]+"\t");
}
}

/**

* @param A 待排序数组
* @param p 待排序的第一个数的下标
* @param r 待排序的最后一个数的下标
*/
public static void Merge_sort(int[] A,int p,int r){
if(p int q=(p+r)/2;
Merge_sort(A,p,q);
Merge_sort(A,q+1,r);
Merge(A,p,q,r);
}
}

/**

* @param A 待排序数组
* @param p 待排序的第一个数的下标
* @param q 第一部分的末尾下标
* @param r 第二部分的末尾下标
*/
public static void Merge(int[] A,int p,int q,int r){
int n1=q-p+1;
int n2=r-q;
int[] L = new int[n1];
int[] R = new int[n2];
for(int i=0;i L[i]=A[p+i];
}
for(int i=0;i R[i]=A[q+i+1];
}
int k=p;
int i=0,j=0;
while(i if(L[i] A[k]=L[i];
i++;
}
else{
A[k]=R[j];
j++;
}
k++;
}
while(i>=L.length&&j A[k]=R[j];
j++;
k++;
}
while(i=R.length){
A[k]=L[i];
i++;
k++;
}

}


}


待排序数组为:3 41 52 26 38 57 9 49
排好序的数组为:3 9 26 38 41 49 52 57

你可能感兴趣的:(Java)