Mega Code Archive

 
Categories / Java / Collections Data Structure
 

A quick sort demonstration algorithm

/*  * The remainder of this file is borrowed from: @(#)QSortAlgorithm.java 1.3 29  * Feb 1996 James Gosling  *   * Copyright (c) 1994-1996 Sun Microsystems, Inc. All Rights Reserved.  *   * 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://www.javasoft.com/copy_trademarks.html for further important copyright  * and trademark information and to http://www.javasoft.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.  */ /**  * A quick sort demonstration algorithm SortAlgorithm.java  *   * @author James Gosling  * @author Kevin A. Smith  * @version @(#)QSortAlgorithm.java 1.3, 29 Feb 1996  */ /**  * This is a generic version of C.A.R Hoare's Quick Sort algorithm. This will  * handle arrays that are already sorted, and arrays with duplicate keys. <BR>  *   * If you think of a one dimensional array as going from the lowest index on the  * left to the highest index on the right then the parameters to this function  * are lowest index or left and highest index or right. The first time you call  * this function it will be with the parameters 0, a.length - 1.  *   * @param a  *            a string array  * @param lo0  *            left boundary of array partition  * @param hi0  *            right boundary of array partition  */ public class Sort {   void QuickSort(String a[], int lo0, int hi0) {     int lo = lo0;     int hi = hi0;     String mid;     if (hi0 > lo0) {       /*        * Arbitrarily establishing partition element as the midpoint of the        * array.        */       mid = a[(lo0 + hi0) / 2];       // loop through the array until indices cross       while (lo <= hi) {         /*          * find the first element that is greater than or equal to the          * partition element starting from the left Index.          */         while ((lo < hi0) && (a[lo].compareTo(mid) < 0))           ++lo;         /*          * find an element that is smaller than or equal to the          * partition element starting from the right Index.          */         while ((hi > lo0) && (a[hi].compareTo(mid) > 0))           --hi;         // if the indexes have not crossed, swap         if (lo <= hi) {           String t = a[hi];           a[hi] = a[lo];           a[lo] = t;           ++lo;           --hi;         }       }       /*        * If the right index has not reached the left side of array must        * now sort the left partition.        */       if (lo0 < hi)         QuickSort(a, lo0, hi);       /*        * If the left index has not reached the right side of array must        * now sort the right partition.        */       if (lo < hi0)         QuickSort(a, lo, hi0);     }   } }