home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
snip9707.zip
/
RG_ISORT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1997-07-05
|
1KB
|
41 lines
/* +++Date last modified: 05-Jul-1997 */
/*
** isort() -- insertion sort
**
** Raymond Gardner public domain 2/93
**
** qsort() compatible, but uses insertion sort algorithm.
*/
#include <stddef.h> /* for size_t definition */
#include "snipsort.h"
void isort(void *base, size_t nmemb, size_t size,
int (*comp)(const void *, const void *))
{
char *i, *j, *lim;
lim = (char *)base + nmemb * size; /* pointer past end of array */
for ( j = (char *)base, i = j+size; i < lim; j = i, i += size )
{
for ( ; comp((void *)j, (void *)(j+size)) > 0; j -= size )
{
char *a, *b;
char tmp;
size_t k = size;
a = j;
b = a + size;
do
{
tmp = *a;
*a++ = *b;
*b++ = tmp;
} while ( --k );
if ( j == (char *)base )
break;
}
}
}