2009-06-11 6 views
1

Je suis assez nouveau dans le langage de programmation C mais je sais qu'il n'est pas standardisé de la même manière que Java. Lorsque vous effectuez une comparaison de l'exécution d'un algorithme, pour que l'analyse soit juste, je dois appeler une méthode similaire à Array.sort de Java (int []).C équivalent à Arrays.sort de Java - qsort? (Comment puis-je trouver la nature de sa mise en œuvre)

void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); 

semble être mon meilleur pari, mais je me demandais comment je pouvais savoir la mise en œuvre de back-end pour la version de C que je suis à la compilation.

Comment puis-je savoir quelle implémentation j'utilise? Est-ce que cela dépend du compilateur ou des inclusions? Je suis en cours d'exécution je cours Ubuntu et utilise le compilateur gcc, tous mes outils sont obtenus via le gestionnaire de paquets synaptic ou sont installés par défaut.

J'espère que cette question a du sens!

Cordialement,

Gavin

Répondre

3

qsort fait partie de la bibliothèque C stadard, donc un coup d'oeil au code libc pourrait aider: http://www.google.com/codesearch/p?hl=en#XAzRy8oK4zA/libc/stdlib/qsort.c&q=qsort

Hope this helps, Vlad

+0

fantastique, c'est ce que je cherchais. Sachant que l'implémentation de qsort est tirée de l'ingénierie, une fonction de tri me permet de comparer mes algorithmes avec toutes les connaissances requises. – gav

0

qsort est une fonction de bibliothèque standard C.

6

Run

man qsort 

Il donne la description de ce que qsort est en train de faire. Lorsque vous avez besoin de trouver les informations sur une fonction C XXX, essayez d'abord de faire man XXX. Ensuite, s'il n'y a pas assez d'informations, recherchez XXX sur Google.

+0

Merci pour le conseil. Les pages de manuel n'ont pas été installées par défaut sur ma machine. Dans la recherche synaptique de manpages-dev pour trouver le paquet requis. Dans ma question boueuse, ce que je cherchais réellement, c'était la mise en place de quicksort car cela peut varier. Le choix de Pivot par exemple peut être implémenté de différentes manières et je ne sais pas assez pour être certain que les implémentations Java et C seraient les mêmes. Je vais certainement utiliser cette fonctionnalité, merci encore. – gav

2

Je suis assez nouveau à la langue de programmation C mais je sais que ce n'est pas normalisé de la même manière que Java.

Au contraire, C est fortement standardisé. Il existe une norme ANSI/ISO pour C depuis 1989.

+0

Si vous avez regardé la spécification Java et la spécification C, vous verrez la différence. La spécification de Java est LOURD par comparaison - pas que la spécification C soit une lecture de lumière. C spec a beaucoup de choses qui sont définies par l'implémentation. Java a très peu. –

0

Quelle implémentation vous obtenez dépend de la libc que vous utilisez. Mais vous n'avez pas à vous soucier de cela trop, ils devraient tous se comporter de la même manière.