File: quicksort.cc

package info (click to toggle)
autodocksuite 4.2.6-8
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 97,028 kB
  • sloc: cpp: 24,257; sh: 4,419; python: 1,261; makefile: 627; perl: 15
file content (88 lines) | stat: -rw-r--r-- 2,115 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/*

 $Id: quicksort.cc,v 1.7 2014/06/12 01:44:08 mp Exp $

 AutoDock 

Copyright (C) 2009 The Scripps Research Institute. All rights reserved.

 AutoDock is a Trade Mark of The Scripps Research Institute.

 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License
 as published by the Free Software Foundation; either version 2
 of the License, or (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

 */

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include "quicksort.h"

#ifdef DEBUG
#include <stdio.h>
#include <string.h>
#endif /* DEBUG */


/* 
\  Based on C.A.R.Hoare's original
 \ algorithm of 1962...
*/

#ifdef DEBUG
extern FILE *logFile; // DEBUG only
#endif /* DEBUG */

void quicksort( const Real e[], 
      /* not const */ int  isort[],
		const int  left,
		const int  right )

{
    int i, last;

#ifdef DEBUG
            char array[101];
#endif  /* DEBUG */

    if (left >= right) {
	return;
    }

#ifdef DEBUG
            strncpy( array, "----------------------------------------------------------------------------------------------------", (size_t)100 );
            array[100] = '\0';
            for (i=left+1; i<right; i++) array[i]=' ';
            array[left] = 'L';
            array[right] = 'R';
            fprintf( logFile, "%s\n", array );
#endif  /* DEBUG */

    swap( isort, left, (left+right)/2 );

    last = left;

    for (i = left+1; i <= right; i++) {
	if (e[isort[i]] < e[isort[left]]) {
	    swap( isort, ++last, i );
	}
    }

    swap( isort, (int)left, (int)last );

    quicksort( e, isort, left,  last-1 );
    quicksort( e, isort, last+1, right  );
}
/* EOF */