29{
30
31
32
33 unsigned range=65535,mask=0xffff;
34 int i,j,k;
35
36 for(k=irecl-1;k >= 0;k--){
37
38
39 for(i = 0 ;i < range+2 ; i++) iwork[i] = 0 ;
40 for(i = 0 ;i <
n ; i++){
41 iwork[(data[irecl*index[i]+k] & mask) + 1] += 1 ;
42 }
43 for(i = 0 ;i < range ; i++) iwork[i+1] += iwork[i];
44 for(i = 0 ;i <
n ; i++){
45 j = data[irecl*index[i]+k] & mask;
46 inds[iwork[j]] = index[i] ;
47 iwork[j] += 1;
48 }
49
50
51 for(i = 0 ;i < range+2 ; i++) iwork[i] = 0 ;
52 for(i = 0 ;i <
n ; i++) {
53 iwork[((data[irecl*inds[i]+k] >> 16) & mask) + 1] += 1 ;
54 }
55 for(i = 0 ;i < range ; i++) iwork[i+1] += iwork[i];
56 for(i = 0 ;i <
n ; i++){
57 j = (data[irecl*inds[i]+k] >> 16) & mask;
58 index[iwork[j]] = inds[i] ;
59 iwork[j] += 1;
60 }
61 }
62
63}