summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/SNIP/perm_idx.c
diff options
context:
space:
mode:
Diffstat (limited to 'reference/C/CONTRIB/SNIP/perm_idx.c')
-rwxr-xr-xreference/C/CONTRIB/SNIP/perm_idx.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/SNIP/perm_idx.c b/reference/C/CONTRIB/SNIP/perm_idx.c
new file mode 100755
index 0000000..9426ede
--- /dev/null
+++ b/reference/C/CONTRIB/SNIP/perm_idx.c
@@ -0,0 +1,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;
+}