Path: blob/devel/ElmerGUI/netgen/libsrc/general/sort.cpp
3206 views
/**************************************************************************/1/* File: sort.cc */2/* Author: Joachim Schoeberl */3/* Date: 07. Jan. 00 */4/**************************************************************************/56/*7Sorting8*/91011#include <algorithm>12#include <mystdlib.h>13#include <myadt.hpp>1415namespace netgen16{1718void Sort (const ARRAY<double> & values,19ARRAY<int> & order)20{21int n = values.Size();22int i, j;2324order.SetSize (n);2526for (i = 1; i <= n; i++)27order.Elem(i) = i;28for (i = 1; i <= n-1; i++)29for (j = 1; j <= n-1; j++)30if (values.Get(order.Elem(j)) > values.Get(order.Elem(j+1)))31{32Swap (order.Elem(j), order.Elem(j+1));33}34}353637void QickSortRec (const ARRAY<double> & values,38ARRAY<int> & order,39int left, int right)40{41int i, j;42double midval;4344i = left;45j = right;46midval = values.Get(order.Get((i+j)/2));4748do49{50while (values.Get(order.Get(i)) < midval) i++;51while (midval < values.Get(order.Get(j))) j--;5253if (i <= j)54{55Swap (order.Elem(i), order.Elem(j));56i++; j--;57}58}59while (i <= j);60if (left < j) QickSortRec (values, order, left, j);61if (i < right) QickSortRec (values, order, i, right);62}6364void QickSort (const ARRAY<double> & values,65ARRAY<int> & order)66{67int i, n = values.Size();68order.SetSize (n);69for (i = 1; i <= n; i++)70order.Elem(i) = i;7172QickSortRec (values, order, 1, order.Size());73}74}757677