mardi 30 juin 2015

qsort fails to sort large array of strings


I'm using qsort to sort an array of i strings of size 256, such as char *arr = malloc(i * 256) -- was actully done with reallocs inside a loop. Each string contains, among text, a number, which I use as the comparison element:

int                                                               
cmp(const void *a, const void *b)                                               
{                                                                               
  double atime = get_time((char*)a);                                            
  double btime = get_time((char*)b);                                            
  return (atime > btime) - (atime < btime);                                     
}

When i is small, it works. With a large i, it fails to sort the array correctly. get_time is working. I was using it with a custom heapsort implementation before, which worked flawlessly.

I added the following to cmp to check what was happening:

fprintf(stderr, "Comparing %f to %f, result: %d.\n", atime, btime, (atime > btime) - (atime < btime));

It seems that all comparisons are correct, but not all comparisons are being made. arr has several strings containing 1.something, however I couldn't find any comparison between numbers greater than 1 in the output. The call to qsort is as follows:

qsort((void*)arr, i-1, MAX_ROW_LEN, cmp);

It's the same parameters I used to pass to my heapsort function, but it doesn't work.

Complete code, and example file (fails to sort).


Aucun commentaire:

Enregistrer un commentaire