So I have an insertion sort here that is supposed to take in any type of input. I have the insertion algorithm correctly. The problem is with the swapping of the pointers. I don't really see what I'm doing wrong.
Code:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "inssort.h"
void inssort (void *base, size_t nelem, size_t size,
int (*compar) (void *, void *))
{
//int i, j;
for ( size_t i = 1 ; i <= nelem; i++ )
{
//size_t offset = size * i;
void *element = (char *) base + i * size;
//void *element2 = (char *) base + (i-1) * size;
//(void) printf("element: %c element2: %c\n", *(char*)element, *(char*)element2);
//double *value = (double *) element;
//double *value2 = (double *) element2;
//printf("e1: %s e2: %s\n", element, element2);
int slot = i;
//void *key = malloc ( 200);
//memcpy( key, element, ((i+1)*size) - (i*size) );
void *key = element;
//Move all values smaller than key up one position
for ( ; slot > 0; --slot )
{
void *ele1 = (char *) base + slot * size;
void *ele2 = (char *) base + (slot-1) * size;
int cmp = (*compar)(ele1, ele2);
if ( cmp > 0)
break;
ele1 = ele2;
}
element = key;
}
//free ( key);
}
int numcmp( void *s1, void *s2)
{
double *no1 = (double *) s1;
double *no2 = (double *) s2;
//(void) printf("v1: %lg v2: %lg
", *no1, *no2);
if ( *no1 < *no2 )
return -1;
else if ( *no1 > *no2 )
return 1;
else
return 0;
}
Here is the code used to call the function from main:
Code:
inssort( array, nelem, sizeof *array, numcmp);
The parameters are correct I'm assuming.