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)14BSpermutation *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