1 #include	"BSprivate.h"
2 
3 /*+ BSnum2perm - Find a permutation that will put numbered nodes
4                  in sorted order
5 
6     Input Parameters:
7 .   numbering - the numbering
8 .   distr - the distribution of the numbering
9 
10     Returns:
11     the permutation
12 
13  +*/
BSnum2perm(BSnumbering * numbering,BSdistribution * distr)14 BSpermutation	*BSnum2perm(BSnumbering *numbering, BSdistribution *distr)
15 {
16 	BSpermutation	*perm;
17 	int	i;
18 	int	*offset, count;
19 
20 	/* allocate permutation */
21 	perm = BSalloc_permutation(numbering->length); CHKERRN(0);
22 
23 	/* find local permutation */
24 	MY_MALLOCN(offset,(int *),sizeof(int)*(distr->max+1),1);
25 	count = 0;
26 	for (i=0;i<=distr->max;i++) {
27 		offset[i] = count;
28 		count += distr->distribution[i];
29 	}
30 	for (i=0;i<numbering->length;i++) {
31 		perm->perm[i] = offset[numbering->numbers[i]];
32 		offset[numbering->numbers[i]]++;
33 	}
34 	MY_FREEN(offset);
35 
36 	return(perm);
37 }
38 
39