| 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:
?