CSC 216/s08/prevent error/page2: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
Line 1: | Line 1: | ||
==Source Code== | |||
This is a full implementation of Merge Sort in Java. Of the many ways available, this one uses arrays. | This is a full implementation of Merge Sort in Java. Of the many ways available, this one uses arrays. | ||
Revision as of 00:27, 22 April 2008
Source Code
This is a full implementation of Merge Sort in Java. Of the many ways available, this one uses arrays.
package mergeSort; /** * mergeSort is an algorithm for sorting a passed array. * * @author Eric LIfka * @version 1.0 */ public class MergeSort{ /** * merge takes two arrays as parameters and returns a sorted array. * * @param left - one of two arrays to be merged * @param right - the other array to be merged * @return result - the resulting array */ public int[] merge(int[] left, int[] right){ // Initialize numbers to be used in the merge algorithm int leftLength = left.length; int rightLength = right.length; int leftLocation = 0; int rightLocation = 0; int resultLocation = 0; // Initialize result array to joint length of left and right int[] result = new int[leftLength + rightLength]; // the merge algorithm // goes through the two arrays adding values to result from smallest to largest while (leftLocation < leftLength && rightLocation < rightLength){ if (left[leftLocation] < right[rightLocation]){ result[resultLocation] = left[leftLocation]; resultLocation ++; leftLocation ++; } else { result[resultLocation] = right[rightLocation]; resultLocation ++; rightLocation ++; } } // these two while loops add whatever's left of the two arrays to the end of result while (leftLocation < leftLength){ result[resultLocation] = left[leftLocation]; resultLocation ++; leftLocation ++; } while (rightLocation < rightLength){ result[resultLocation] = right[rightLocation]; resultLocation ++; rightLocation ++; } // Return the result return result; } /** * sort takes an array, separates it into two equal arrays * and calls itself on the two new arrays, sorting the array * via recursion. * * @param source - the array to be sorted * @return the sorted version of source */ public int[] sort(int[] source){ // Check to see if source is size one and return it if so if (source.length <= 1){ return source; } // Initialize left, right and middle int middle = source.length / 2; int[] left = new int[middle]; int[] right = new int[source.length - middle]; // Run through source separating it into left and right for (int length = 0; length < source.length; length++){ if (length < middle){ left[length] = source[length]; } else { right[length - middle] = source[length]; } } // Call merge on the sorted version of left and right return this.merge(this.sort(left), this.sort(right)); } }