Vous n'avez pas compris ce que je fais.
En gros, ma structure a cette tronche:
struct array_t {
void *data;
size_t elts;
size_t blocs;
};
data pointe sur un tableau de pointeurs (chaque pointeur pointe sur un bloc mémoire), elts représente le nombre total d'éléments dans les blocs, et blocs est le nombre de blocs. On va dire qu'on a 1000 elts par bloc pour l'exemple. Pour accéder au xième elt, il me faut l'index du bloc qui le contient (n1) et l'index de l'elt dans le bloc (n2).
n1=x/1000;
n2=x%1000;
En clair, les elts de [x, x+1000[ sont dans le bloc d'index x. Comme ces blocs sont rangés dans un tableau de pointeurs, je ne peux pas utiliser l'implémentation traditionnelle de qsort. Simple, non?
Tout au mieux, je peux trier les éléments d'un bloc ce qui ne sert pas à grand chose. Je pourrais aussi tout copier dans une zone mémoire contigüe, faire le qsort et recopier le résultat dans ma structure. V'la le gachis (pour l'instant, j'utilise une implémentation "naïve" de qsort, ce qui est à peine mieux).
Message édité par docmaboul le 03-04-2007 à 17:15:15