mergesort java
public class MergeSort { public static void main(String[] args) { int i; int values[] = new int[11]; for(i=0; i<values.length; i++) { values[i]=values.length-i; } print(values); sort(values,0,values.length-1); print(values); } public static void sort(int[] numbers, int p,int r) { int q; if(p<r) { q = (p+r)/2; sort(numbers,p,q); sort(numbers,q+1,r); merge(numbers,p,q,r); } } /** * p, mid, and r are indices into the array such that p <= mid < r. * The procedure assumes that the subarrays 'numbers[p..mid]' and 'numbers[mid+1..r]' are * in sorted order. It merge them to form a single sorted subarray that replaces * the current subarray 'numbers[p..r]'. */ private static void merge(int[] values, int p, int mid, int r) { int i,j,k; int n1 = mid - p + 1; int n2 = r - mid; int[] left = new int[n1+1]; int[] right = new int[n2+1]; for(i=0; i<n1; i++) { left[i] = values[ p + i ]; } for(j=0; j<n2; j++) { right[j] = values[mid + j + 1]; } left[n1] = Integer.MAX_VALUE; right[n2] = Integer.MAX_VALUE; i=0; j=0; for(k=p; k<=r; k++) { if(left[i]<=right[j]) { values[k] = left[i]; i = i + 1; } else { values[k] = right[j]; j = j + 1; } } } public static void print(int[] numbers) { int i; for(i=0; i<numbers.length; i++) { System.out.print(numbers[i]+ " "); } System.out.println(); } }