package sort; /*分治法实现归并排序算法 * 递归调用mergeSort方法来对数组A排序 * 输入:一个可排序数组A * 输出:非降序排列的数组A */ import java.util.*; import java.io.*; public class MergeSort { static void mergeSort(int A[],int n){ if(n>1){ int B[] = Arrays.copyOfRange(A,0,n/2); int C[] = Arrays.copyOfRange(A,n/2,n); mergeSort(B,B.length); mergeSort(C,C.length); merge(B,C,A); } } static void merge(int B[],int C[],int A[]){ int i = 0; int j = 0; int k = 0; while(i<B.length&&j<C.length){ if(B[i]<=C[j]){ A[k++] = B[i++]; } else{ A[k++] = C[j++]; } } if(i==B.length){ while(j<C.length){ A[k++] = C[j++]; } } else{ while(i<B.length){ A[k++] = B[i++]; } } } public static void main(String[] args) { System.out.println("请输入需排序的数组的长度:"); Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int arr[] = new int[n]; System.out.println("请输入数组中的元素,用回车隔开"); try{ for(int i=0;i<arr.length;i++){ arr[i] = Integer.parseInt(br.readLine()); } }catch(IOException e){ e.printStackTrace(); } System.out.println("输入的数组为:"); for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } System.out.println(); mergeSort(arr,arr.length);//调用方法mergeSort对数组arr排序 System.out.println("经过排序后:"); for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } } }