X-Git-Url: http://git.dev.opencascade.org/gitweb/?p=occt.git;a=blobdiff_plain;f=src%2FNCollection%2FNCollection_QuickSort.hxx;h=b83a4c50ceff4989aa3c63b0540d4c10b3978c14;hb=3c1624950a2ded5d420cd6931581c0692c3b8964;hpb=4e283d3379f989e437c83cdfa91bdca31607bb35 diff --git a/src/NCollection/NCollection_QuickSort.hxx b/src/NCollection/NCollection_QuickSort.hxx deleted file mode 100644 index b83a4c50ce..0000000000 --- a/src/NCollection/NCollection_QuickSort.hxx +++ /dev/null @@ -1,107 +0,0 @@ -// Created on: 2011-01-27 -// Created by: KGV -// Copyright (c) 2011-2014 OPEN CASCADE SAS -// -// This file is part of Open CASCADE Technology software library. -// -// This library is free software; you can redistribute it and/or modify it under -// the terms of the GNU Lesser General Public License version 2.1 as published -// by the Free Software Foundation, with special exception defined in the file -// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT -// distribution for complete text of the license and disclaimer of any warranty. -// -// Alternatively, this file may be used under the terms of Open CASCADE -// commercial license or contractual agreement. - -#ifndef _NCollection_QuickSort_HeaderFile -#define _NCollection_QuickSort_HeaderFile - -#include -#include - -/** - * Perform sorting of enumerable collection with QuickSort algorithm. - * Enumerable collection should provide the random access to its values - * by index number with methods Value(theId) and ChangeValue(theId). - * Currently it supposed to be used with NCollection_Sequence and NCollection_Vector. - * - * Usage sample: - * // input sequence - * NCollection_Sequence aSequence; - * // perform sorting for the whole sequence. - * NCollection_QuickSort, Standard_Real> - * ::Perform (aSequence, NCollection_Comparator(), - * 1, aSequence.Size()); - */ -template -class NCollection_QuickSort -{ -public: - - //! Main entry call to perform sorting - static void Perform (TheCollType& theEnumColl, - const NCollection_Comparator& theComparator, - const Standard_Integer theLower, - const Standard_Integer theUpper) - { - if (theLower < theUpper) - { - Standard_Integer aPivotPosition = Partition (theEnumColl, theComparator, - theLower, theUpper); - if (theLower < aPivotPosition) - { - // recursive call - Perform (theEnumColl, theComparator, - theLower, aPivotPosition - 1); - } - // recursive call - Perform (theEnumColl, theComparator, - aPivotPosition + 1, theUpper); - } - } - -private: - - //! Auxiliary function - static void SwapValues (TheItemType& x, TheItemType& y) - { - TheItemType aCopy = x; - x = y; - y = aCopy; - } - - static Standard_Integer Partition (TheCollType& theEnumColl, - const NCollection_Comparator& theComparator, - const Standard_Integer theLower, - const Standard_Integer theUpper) - { - Standard_Integer anIdLeft (theLower), anIdRight (theUpper); - const TheItemType aPivot = theEnumColl.Value (theLower); - - while (anIdLeft < anIdRight) - { - while (theComparator.IsGreater (theEnumColl.Value (anIdRight), aPivot)) - { - --anIdRight; - } - while ((anIdLeft < anIdRight) && - theComparator.IsLowerEqual (theEnumColl.Value (anIdLeft), aPivot)) - { - ++anIdLeft; - } - - if (anIdLeft < anIdRight) - { - SwapValues (theEnumColl.ChangeValue (anIdLeft), - theEnumColl.ChangeValue (anIdRight)); - } - } - - theEnumColl.ChangeValue (theLower) = theEnumColl.Value (anIdRight); - theEnumColl.ChangeValue (anIdRight) = aPivot; - return anIdRight; - } - -}; - -#endif /*_NCollection_QuickSort_HeaderFile*/