Listing 6 A generic selection sort function

/* 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;
             }
       }
}
/* End of File */