This page contains an archived post to the Java Answers Forum made prior to February 25, 2002.
If you wish to participate in discussions, please visit the new
Artima Forums.
Message:
REPLY
Posted by Cro on May 07, 2001 at 12:38 PM
> All you have to do is stop being a Java Boy... > I'm new to Java and cannot figure out how to change the sort order in this code. Can someone help me? > > /* > * MergeSort.java > * > * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved. > * > * This software is the confidential and proprietary information of Sun > * Microsystems, Inc. ("Confidential Information"). You shall not > * disclose such Confidential Information and shall use it only in > * accordance with the terms of the license agreement you entered into > * with Sun. > * > * 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. > * > */ > /** > * An implementation of MergeSort, needs to be subclassed to > * compare the terms. > * > * @author Scott Violet > */ > public abstract class MergeSort extends Object { > protected Object toSort[]; > protected Object swapSpace[]; > public void sort(Object array[]) { > if(array != null && array.length > 1) > { > int maxLength; > > maxLength = array.length; > swapSpace = new Object[maxLength]; > toSort = array; > this.mergeSort(0, maxLength - 1); > swapSpace = null; > toSort = null; > } > } > public abstract int compareElementsAt(int beginLoc, int endLoc); > protected void mergeSort(int begin, int end) { > if(begin != end) > { > int mid; > mid = (begin + end) / 2; > this.mergeSort(begin, mid); > this.mergeSort(mid + 1, end); > this.merge(begin, mid, end); > } > } > protected void merge(int begin, int middle, int end) { > int firstHalf, secondHalf, count; > firstHalf = count = begin; > secondHalf = middle + 1; > while((firstHalf <= middle) && (secondHalf <= end)) > { > if(this.compareElementsAt(secondHalf, firstHalf) < 0) > swapSpace[count++] = toSort[secondHalf++]; > else > swapSpace[count++] = toSort[firstHalf++]; > } > if(firstHalf <= middle) > { > while(firstHalf <= middle) > swapSpace[count++] = toSort[firstHalf++]; > } > else > { > while(secondHalf <= end) > swapSpace[count++] = toSort[secondHalf++]; > } > for(count = begin;count <= end;count++) > toSort[count] = swapSpace[count]; > } > }
Replies:
|