GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — Algorithm-Implementations/MergeSort.java at master · devForTheFuture/Algorithm-Implementations Expand file tree/ Copy pathMergeSort.javaMore file actions 144 lines (126 loc) · 2.85 KB / Copy pathMergeSort.javaFile metadata and controls144 lines (126 loc) · 2.85 KB 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 package algorithms; import java.util.Arrays; import java.util.Random; /** * Merge sort algorithm (Top down) based on pseudocode at Wikipedia "Merge sort" article. * * @see <a href="http://en.wikipedia.org/wiki/Merge_sort"/> * @author djitz */ public class MergeSort { public static void main(String[] args) { //Generate an integer array of length 7 int[] input = generateRandomNumbers(7); //Before sort System.out.println(Arrays.toString(input)); //After sort System.out.println(Arrays.toString(mergeSort(input))); } /** * Sorts the input array using top-down merge sort algorithm. * @param the array of integers to sort * @return sorted array of integers */ private static int[] mergeSort(int[] input) { if(input.length == 1) { return input; } int middle = (int) Math.ceil((double)input.length / 2); int[] left = new int[middle]; int rightLength = 0; if(input.length % 2 == 0) { rightLength = middle; } else { rightLength = middle - 1; } int[] right = new int[rightLength]; int leftIndex = 0; int rightIndex = 0; for (int i = 0; i < input.length; i++) { if(i < middle) { left[leftIndex] = input[i]; leftIndex++; } else { right[rightIndex] = input[i]; rightIndex++; } } left = mergeSort(left); right = mergeSort(right); return merge(left, right); } /** * Merges two integer arrays into a sorted integer array. * @param left first array * @param right second array * @return a sorted integer array */ private static int[] merge(int[] left, int[] right) { int[] result = new int[left.length + right.length]; int leftIndex = 0; int rightIndex = 0; int resultIndex = 0; while(leftIndex < left.length || rightIndex < right.length) { if(leftIndex < left.length && rightIndex < right.length) { if(left[leftIndex] < right[rightIndex]) { result[resultIndex] = left[leftIndex]; leftIndex++; resultIndex++; } else { result[resultIndex] = right[rightIndex]; rightIndex++; resultIndex++; } } else if(leftIndex < left.length) { for (int i = resultIndex; i < result.length; i++) { result[i] = left[leftIndex]; leftIndex++; } } else if(rightIndex < right.length) { for (int i = resultIndex; i < result.length; i++) { result[i] = right[rightIndex]; rightIndex++; } } } return result; } /** * Generates an array of random integers with length n. * @param the length of the array to generate * @return array of random integers with length n */ private static int[] generateRandomNumbers(int n) { int[] result = new int[n]; Random random = new Random(); for (int i = 0; i < result.length; i++) { result[i] = random.nextInt(n * 10); } return result; } } |
| You are visitor 01402520 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |