Divide and conquer, merge sort
The algorithm is easy to understand, the first write error, mistakenly the original array of the following table as a temporary array to consider, the result is conceivable, access to the cross
Here is the correct code
Import Java.util.scanner;public class MergeSort {/** * @param args */public static void main (string[] args) {//TODO auto- Generated method Stubscanner Scanner=new scanner (system.in); int N=integer.parseint (Scanner.next ());; int []a=new int[n];for (int i = 0; i < n; i++) {A[i]=integer.parseint (Scanner.next ());} MergeSort (a,0,n-1); for (int i = 0; i < n; i++) {System.out.print (a[i]+ "");}} public static void MergeSort (int a[], int begin, int end) {if ((end-begin) >=1) {mergesort (A, Begin, begin+ (End-begin)/2 ); MergeSort (A, begin+ (End-begin)/2+1, end), merge (A, Begin, begin+ (End-begin)/2, end);}} public static void merge (int a[], int b, int m, int e) {int []arry1=new int[m-b+1];//temporary arrayint []arry2=new int[e- M];int i=b;int j=m+1;int k=0;for (k = 0; k < arry1.length;) {arry1[k++]=a[i++];} for (k = 0; k < arry2.length;) {arry2[k++]=a[j++];} I=0;j=0;for (k = b; i<arry1.length&&j<arry2.length; k++) {if (Arry1[i]<arry2[j]) {a[k]=arry1[i++];} Else{a[k]=arry2[j++];}}for (; i<arry1.length; k++) {a[k]=arry1[i++];} for (; j<arry2.length; k++) {a[k]=arry2[j++];}}}