/******************************************************************************* * Copyright (c) 2014, 2015 Cisco Systems, Inc. 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 * *******************************************************************************/ package com.cisco.yangide.core.buffer; /** * @author Konstantin Zaitsev * @date Jun 24, 2014 */ public class ToStringSorter { Object[] sortedObjects; String[] sortedStrings; /** * Returns true if stringTwo is 'greater than' stringOne This is the 'ordering' method of the * sort operation. */ public boolean compare(String stringOne, String stringTwo) { return stringOne.compareTo(stringTwo) < 0; } /** * Sort the objects in sorted collection and return that collection. */ private void quickSort(int left, int right) { int originalLeft = left; int originalRight = right; int midIndex = left + (right - left) / 2; String midToString = this.sortedStrings[midIndex]; do { while (compare(this.sortedStrings[left], midToString)) left++; while (compare(midToString, this.sortedStrings[right])) right--; if (left <= right) { Object tmp = this.sortedObjects[left]; this.sortedObjects[left] = this.sortedObjects[right]; this.sortedObjects[right] = tmp; String tmpToString = this.sortedStrings[left]; this.sortedStrings[left] = this.sortedStrings[right]; this.sortedStrings[right] = tmpToString; left++; right--; } } while (left <= right); if (originalLeft < right) quickSort(originalLeft, right); if (left < originalRight) quickSort(left, originalRight); } /** * Return a new sorted collection from this unsorted collection. Sort using quick sort. */ public void sort(Object[] unSortedObjects, String[] unsortedStrings) { int size = unSortedObjects.length; this.sortedObjects = new Object[size]; this.sortedStrings = new String[size]; // copy the array so can return a new sorted collection System.arraycopy(unSortedObjects, 0, this.sortedObjects, 0, size); System.arraycopy(unsortedStrings, 0, this.sortedStrings, 0, size); if (size > 1) quickSort(0, size - 1); } }