| /******************************************************************************* |
| * Copyright (c) 2001, 2006 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| * yyyymmdd bug Email and other contact information |
| * -------- -------- ----------------------------------------------------------- |
| * 20060217 127138 pmoogk@ca.ibm.com - Peter Moogk |
| *******************************************************************************/ |
| |
| package org.eclipse.wst.ws.internal.explorer.platform.util; |
| |
| import java.util.Vector; |
| import com.ibm.icu.text.Collator; |
| |
| public class QuickSort |
| { |
| public static final void sort(Object[] a,int lo,int hi) |
| { |
| Object tmp; |
| int i = lo; |
| int j = hi; |
| Object x = a[(lo+hi)/2]; |
| Collator collator = Collator.getInstance(); |
| |
| do |
| { |
| while (collator.compare(a[i].toString(),x.toString()) < 0) i++; |
| while (collator.compare(a[j].toString(),x.toString()) > 0) j--; |
| if (i <= j) |
| { |
| tmp = a[i]; |
| a[i] = a[j]; |
| a[j] = tmp; |
| i++; |
| j--; |
| } |
| } while (i <= j); |
| |
| if (lo < j) |
| sort(a,lo,j); |
| if (i < hi) |
| sort(a,i,hi); |
| } |
| |
| /* |
| * This method will use the same algorithm as above |
| * with the exception that any nulls will be attached |
| * at the end |
| */ |
| public static final void sort(Vector v) |
| { |
| // do not sort if vector contains less than 2 elements |
| if (v.size() < 2) |
| return; |
| |
| // pulls out the nulls |
| Vector nulls = new Vector(); |
| for (int i = 0; i < v.size(); i++) { |
| Object obj = v.elementAt(i); |
| if (obj == null || obj.toString() == null) { |
| nulls.add(obj); |
| v.remove(i); |
| i--; |
| } |
| } |
| |
| // sort the not null objects |
| Object[] objs = v.toArray(); |
| // do not sort if array contains less than 2 objects |
| if (objs.length >= 2) |
| sort(objs, 0, objs.length-1); |
| |
| // re-construct the vector from the sorted objects, then the nulls |
| v.clear(); |
| for (int j = 0; j < objs.length; j++) { |
| v.add(objs[j]); |
| } |
| v.addAll(nulls); |
| } |
| } |