Merge Sort
Algorithm Simulation? [GoTo HomPage] [Merge Sort Algorithm][User Guide][Design and Implementation][MergeSort.java] |
[GoTo HomPage] [Merge Sort Algorithm] [User Guide] [Design and Implementation][MergeSort.java]? BY attending the University of MyongJi at Yong_In,?#060;/i> as a Junior majoring in Computer Engineering, JungSig Min. Last Updated : Thu.May.15 |
Following Merge Sort Algorithm is designed by
James Gosling
http://max.cs.kzoo.edu/~abrady/java/sorting/MergeSort.html
Click on the applet below to
see the algorithm run
/* @(#)MergeSortAlgorithm.java1.0 97/02/15 Alyce Brady based on @(#)BubbleSortAlgorithm.java1.6f 95/01/31 James Gosling which had Copyright (c) 1994-1996 Sun Microsystems, Inc. All Rights Reserved. See additional copyright information below. A selection sort demonstration algorithm based on SortAlgorithm.java and SortItem.java. / class MergeSortAlgorithm extends SortAlgorithm { void mergeSort(int a[], int start, int segLength) throws Exception { // Divide the array segment to be sorted in two and then // sort and merge those two. int half = segLength / 2; // half (rounded down) // Sort each of the two sub-segments if ( half > 1 ) mergeSort (a, start, half); if ( segLength - half > 1 ) mergeSort (a, start + half, segLength - half); // Copy the two sub-segments and then merge them into the sorted whole int t1[] = new int[half]; int t2[] = new int[segLength - half]; int i = start; for ( int j = 0; j < half; ) // copy 1st half t1[j++] = a[i++]; for ( int j = 0; i < segLength; ) // copy 2nd half t2[j++] = a[i++]; merge (a, start, t1, t2); // merge 2 halves } void merge (int a[], int start, int t1[], int t2[]) throws Exception { int index = start; int end = start + t1.length + t2.length; int t1index = 0; int t2index = 0; pause(start, end); while ( t1index < t1.length && t2index < t2.length ) { if (stopRequested) { return; } if ( t1[t1index] <= t2[t2index] ) a[index] = t1[t1index++]; else a[index] = t2[t2index++]; pause(index++, end); } while ( t1index < t1.length ) { if (stopRequested)?return; a[index] = t1[t1index++]; pause(index++, end); } while ( t2index < t2.length ) { if (stopRequested)?return; a[index] = t2[t2index++]; pause(index++, end); } } public void sort(int a[]) throws Exception { if ( a.length > 1 ) mergeSort(a, 0, a.length); } } /* Permission information for original BubbleSort algorithm: Permission to use, copy, modify, and distribute this software and its documentation for NON-COMMERCIAL or COMMERCIAL purposes and without fee is hereby granted.?? Please refer to the file http://java.sun.com/copy_trademarks.html for further important copyright and trademark information and to http://java.sun.com/licensing.html for further important licensing information for the Java (tm) Technology. SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES").?SUN SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES. /
Original sorting algorithms by:
?