ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/diamesh/src/trirea.cpp
Revision: 5
Committed: Tue Jun 12 20:26:34 2007 UTC (17 years, 11 months ago)
Original Path: magic/lib/diamesh/diamesh/src/trirea.cpp
File size: 2400 byte(s)
Log Message:

File Contents

# User Rev Content
1 5 /*****************************************************************
2    
3     trirea.c Type:Func
4    
5     tri d un tableau dans le sens croissant
6    
7     Vient de Alain RASSINEUX
8    
9    
10    
11    
12    
13    
14     *****************************************************************/
15    
16    
17    
18    
19     #include <stdio.h>
20     void trirea(float *a,int *la,int *ir)
21     {
22     int iu[21], il[21], i, m, j, k, ij, l, itt, it ;
23     float t, tt, r ;
24    
25     if (*la<=0) return ;
26     m = 1 ;
27     i = 1 ;
28     j = *la ;
29     r = 0.375 ;
30     lab5 : if (i==j) goto lab45 ;
31     if (r>0.5898437) goto lab10 ;
32     r = r + 3.90625e-2 ;
33     goto lab15 ;
34     lab10 : r = r - 0.21875 ;
35     lab15 : k = i ;
36    
37     ij = i+(j-i)*r ;
38     t = a[ij-1] ;
39     it = ir[ij-1] ;
40    
41     if (a[i-1]<=t) goto lab20 ;
42     a[ij-1] = a[i-1] ;
43     a[i-1] = t ;
44     t = a[ij-1] ;
45     ir[ij-1] = ir[i-1] ;
46     ir[i-1] = it ;
47     it = ir[ij-1] ;
48     lab20 : l = j ;
49    
50     if (a[j-1]>=t) goto lab30 ;
51     a[ij-1] = a[j-1] ;
52     a[j-1] = t ;
53     t = a[ij-1] ;
54     ir[ij-1] = ir[j-1] ;
55     ir[j-1] = it ;
56     it = ir[ij-1] ;
57    
58     if (a[i-1]<=t) goto lab30 ;
59     a[ij-1] = a[i-1] ;
60     a[i-1] = t ;
61     t = a[ij-1] ;
62     ir[ij-1] = ir[i-1] ;
63     ir[i-1] = it ;
64     // it = ir[ij-1] ;
65     goto lab30 ;
66     lab25 : if (a[l-1]==a[k-1]) goto lab30 ;
67     tt = a[l-1] ;
68     a[l-1] = a[k-1] ;
69     a[k-1] = tt ;
70     itt = ir[l-1] ;
71     ir[l-1] = ir[k-1] ;
72     ir[k-1] = itt ;
73     lab30 : l = l-1 ;
74     if (a[l-1]>t) goto lab30 ; ;
75    
76     lab35 : k = k+1 ;
77     if (a[k-1]<t) goto lab35 ;
78     if (k<=l) goto lab25 ;
79     if ((l-i)<=(j-k)) goto lab40 ;
80     il[m-1] = i ;
81     iu[m-1] = l ;
82     i = k ;
83     m = m+1 ;
84     goto lab50 ;
85     lab40 : il[m-1] = k ;
86     iu[m-1] = j ;
87     j = l ;
88     m = m+1 ;
89     goto lab50 ;
90     lab45 : m = m-1 ;
91     if (m==0) return ;
92     i = il[m-1] ;
93     j = iu[m-1] ;
94     lab50 : if ((j-i)>=11) goto lab15 ;
95     if (i==1) goto lab5 ;
96     i = i-1 ; ;
97     lab55 : i = i+1 ;
98     if (i==j) goto lab45 ;
99     t = a[i] ;
100     it = ir[i] ;
101     if (a[i-1]<=t) goto lab55 ;
102     k = i ;
103     lab60 : a[k] = a[k-1] ;
104     ir[k] = ir[k-1] ;
105     k = k-1 ;
106     if (t<a[k-1]) goto lab60 ;
107     a[k] = t ;
108     ir[k] = it ;
109     goto lab55 ;
110     }