Merge sort
Java Code
public class MERGESORT { static final int[] list = {32, 64, 3, 1, 0, 8, 16, 65536, 32768, 4, 2, 128, 256, 1024, 512, 2048, 4096, 16384, 8192}; public static void main(String[] args) { MERGESORT main = new MERGESORT(); int[] list_sorted = main.mergesort(list); System.out.println("unsorted array:"); main.read(list); System.out.println("sorted array:"); main.read(list_sorted); } /** * Prints out the argument array. * * @param array the argument array */ void read(int[] array) { for (short i = 0; i < array.length; i++) { if (i == (array.length - 1)) { System.out.println(array[i]); } else { System.out.print(array[i] + " | "); } } } /** * Sorts the argument array. * Divides the argument array recursively until the subarrays contain one element. * * @param list the argument array * @return the sorted argument array */ int[] mergesort(int[] list) { if (list.length <= 1) { return list; } else { int[] listleft = new int[list.length / 2]; int[] listright = new int[(list.length - list.length / 2)]; for (short i = 0; i < list.length; i++) { if (i < list.length / 2) { listleft[i] = list[i]; } if (i >= list.length / 2) { listright[i - listleft.length] = list[i]; } } /* recursively sort the list from left to right */ listleft = mergesort(listleft); listright = mergesort(listright); return merge(listleft, listright); } } /** * Merges the sorted argument arrays. * * @param listleft the sorted argument array * @param listright the sorted argument array * @return the merged array */ int[] merge(int[] listleft, int[] listright) { int[] list = new int[listleft.length + listright.length]; int i = 0, left = 0, right = 0; while (left < listleft.length && right < listright.length) { if (listleft[left] < listright[right]) list[i++] = listleft[left++]; else list[i++] = listright[right++]; } while (left < listleft.length) list[i++] = listleft[left++]; while (right < listright.length) list[i++] = listright[right++]; return list; } }Output
unsorted array: 32 | 64 | 3 | 1 | 0 | 8 | 16 | 65536 | 32768 | 4 | 2 | 128 | 256 | 1024 | 512 | 2048 | 4096 | 16384 | 8192 sorted array: 0 | 1 | 2 | 3 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 | 8192 | 16384 | 32768 | 65536Compile & run Guide:
$ javac MERGESORT.java $ java MERGESORT