~ubuntu-branches/ubuntu/wily/eso-midas/wily-proposed

« back to all changes in this revision

Viewing changes to libsrc/math/sort.c

  • Committer: Package Import Robot
  • Author(s): Ole Streicher
  • Date: 2014-04-22 14:44:58 UTC
  • Revision ID: package-import@ubuntu.com-20140422144458-okiwi1assxkkiz39
Tags: upstream-13.09pl1.2+dfsg
ImportĀ upstreamĀ versionĀ 13.09pl1.2+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* @(#)sort.c   19.1 (ES0-DMD) 02/25/03 13:55:39 */
 
2
/*===========================================================================
 
3
  Copyright (C) 1995 European Southern Observatory (ESO)
 
4
 
 
5
  This program is free software; you can redistribute it and/or 
 
6
  modify it under the terms of the GNU General Public License as 
 
7
  published by the Free Software Foundation; either version 2 of 
 
8
  the License, or (at your option) any later version.
 
9
 
 
10
  This program is distributed in the hope that it will be useful,
 
11
  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
  GNU General Public License for more details.
 
14
 
 
15
  You should have received a copy of the GNU General Public 
 
16
  License along with this program; if not, write to the Free 
 
17
  Software Foundation, Inc., 675 Massachusetss Ave, Cambridge, 
 
18
  MA 02139, USA.
 
19
 
 
20
  Corresponding concerning ESO-MIDAS should be addressed as follows:
 
21
        Internet e-mail: midas@eso.org
 
22
        Postal address: European Southern Observatory
 
23
                        Data Management Division 
 
24
                        Karl-Schwarzschild-Strasse 2
 
25
                        D 85748 Garching bei Muenchen 
 
26
                        GERMANY
 
27
===========================================================================*/
 
28
 
 
29
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
30
.COPYRIGHT   (c)  1995  European Soutern Observatory
 
31
.IDENT       hsort.c
 
32
.LANGUAGE    C
 
33
.AUTHOR      P.Grosbol,  IPG/ESO
 
34
.ENVIRON     UNIX
 
35
.KEYWORDS    sort, heapsort
 
36
.COMMENT     Algorithm is adapted from 'Numerical Recipes in C' p.247
 
37
.VERSION     1.0  1995-Mar-09 : Creation,  PJG
 
38
-----------------------------------------------------------------------*/
 
39
 
 
40
void hsort(n, ra)
 
41
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
42
.PURPOSE   sort array in place using heapsort
 
43
.RETURN    none
 
44
-----------------------------------------------------------------------*/
 
45
int        n;                    /* no. of elements in array           */
 
46
float      *ra;                   /* pointer to array to be sorted      */
 
47
{
 
48
  int      l, j, ir, i;
 
49
  float    rra;
 
50
 
 
51
  l = n >> 1;
 
52
  ir = n - 1;
 
53
 
 
54
  while (1) {
 
55
     if (l>0)
 
56
       rra = ra[--l];
 
57
     else {
 
58
        rra = ra[ir];
 
59
        ra[ir] = ra[0];
 
60
        if (--ir == 0) {
 
61
           ra[0] = rra;
 
62
           return;
 
63
         }
 
64
      }
 
65
     i = l;
 
66
     j = (l << 1) + 1;
 
67
     while (j<=ir) {
 
68
        if (j<ir && ra[j]<ra[j+1]) ++j;
 
69
        if (rra<ra[j]) {
 
70
           ra[i] = ra[j];
 
71
           j += (i=j) + 1;
 
72
         }
 
73
        else j = ir + 1;
 
74
      }
 
75
     ra[i] = rra;
 
76
   }
 
77
}