File: perm_idx.c

package info (click to toggle)
c-cpp-reference 2.0.2-6
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny
  • size: 8,012 kB
  • ctags: 4,612
  • sloc: ansic: 26,960; sh: 11,014; perl: 1,854; cpp: 1,324; asm: 1,239; python: 258; makefile: 115; java: 77; awk: 34; csh: 9
file content (37 lines) | stat: -rwxr-xr-x 1,032 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
/*
** Determine the permutation index for a given permutation list.
** Written by Thad Smith III, Boulder, CO  8/31/91
** Hereby contributed to the Public Domain.
**
** The following function computes the ordinal of the given permutation,
** which is index of the permutation in sorting order:
**  1, 2, ..., n-1, n   is index 0
**  1, 2, ..., n, n-1   is index 1
**  ...
**  n, n-1, ..., 2, 1   is index n! -1
**
** The actual values of the elements are immaterial, only the relative
** ordering of the values is used.
**
** pit[] is the array of elements of length size.
** The return value is the permutation index.
*/

int perm_index (char pit[], int size)
{
      int i;
      register int j, ball;
      int index = 0;

      for (i = 1; i < size; i++)
      {
            ball = pit[i-1];
            for (j = i; j < size; j++)
            {
                  if (ball > pit[j])
                        index ++;
            }
            index *= size - i;
      }
      return index;
}