packages feed

sym-0.9: cbits/sortop.c

/* (c) Anders Claesson 2013 */

#include <string.h>

/* One pass of stack-sort implemented a la Petter Br\"and\'en [Actions
 * on permutations and unimodality of descent polynomials, European
 * J. Combin. 29 (2008)]
 */
void
stacksort(long *u, long *w, long len) {
        long i = 0;
        long j = 0;
        long y;
	long size = len * sizeof(*w);

	memcpy(u, w, size);

        while (i < len) {
                j = i;
                y = u[j];
                while (y > u[j+1] && j+1 < len) {
                        u[j] = u[j+1];
                        j++;
                }
                u[j] = y;
                if (j == i)
			i++;
        }
}

/* On pass of bubble-sort */
void
bubblesort(long *u, long *w, long len) {
        long tmp;
	long size = len * sizeof(*w);

	memcpy(u, w, size);

	for (; len > 1; len--, u++) {
		if (*u > *(u+1)) {
			tmp    = *u;
			*u     = *(u+1);
			*(u+1) = tmp;
		}
	}
}