算法导论中合并排序: package sort; /** * MergSort * @author DQJK * @date 2009-8-10 * @version 1.0 * * */ public class MergSort{ private int[] arr; public MergSort(int[] arr){ this.arr = arr; } private void merg(int[] arr, int p, int q, int r){ int n1 = q - p + 1; int n2 = r- q; int[] arrL = new int[n1+1]; int[] arrR = new int[n2+1]; for(int i = 0 ;i < n1 ; i++){ arrL[i] = arr[p+i]; } for(int j = 0; j < n2;j++){ arrR[j] = arr[q+j+1]; } int sentinel = Integer.MAX_VALUE; arrL[n1] = arrR[n2] = sentinel; int i =0 ,j =0; for(int k = p; k <= r;k++){ if(arrL[i] <=arrR[j] ){ arr[k] = arrL[i]; i +=1; } else{ arr[k] = arrR[j]; j +=1; } } } private void sort(int[]arr, int p,int r ){ if(p < r){ int q = (int) Math.floor((p+r)/2); sort(arr,p,q); sort(arr,q+1,r); merg(arr,p,q,r); } } public void getsorted(){ sort(arr,0,arr.length-1); } public void print(){ for(int i = 0 ;i < arr.length; i++){ System.out.print(arr[i] + "/t"); } System.out.println(); } public static void main(String [] args){ // System.out.println(Integer.MAX_VALUE); // int[] al = {5,2,4,7,1,3,2,6}; int[] al = {5,2,4,6,1,3}; // System.out.println(al.length); MergSort ms = new MergSort(al); ms.print(); ms.getsorted(); ms.print(); } }