/* ssort.c: Generic selection sort */

#include <stddef.h>

void ssort(void *array, size_t nelems, size_t size,
  int (*comp)(const void *, const void *))
{
    size_t i, j, n;
    
    for (i = 0; i < nelems-1; ++i)
        for (j = i+1; j < nelems; ++j)
        {
            char *p1 = (char *) array + i*size;
            char *p2 = (char *) array + j*size;
            if (comp(p1,p2) > 0)
                for (n = 0; n < size; ++n)
                {
                    /* Swap elements byte-by-byte */
                    char t = p1[n];
                    p1[n] = p2[n];
                    p2[n] = t;
                }
        }
}

