Tri d'entier dans l'ordre croissant (trishell)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 105 fois - Téléchargée 30 fois

Contenu du snippet

Fonction de tri d'un tableau d'entier par ordre croissant. Utile pour l'algorithmie. Le tri est rapide, il se base sur l'algorithme le plus courament utilisé pour un TriShell.

Source / Exemple :


#include <stdio.h>

void trishell(int *p, int N)
{
    int ecart, i, j, tmp;
    for(ecart = N/2; ecart > 0; ecart /= 2)
        for(i = ecart; i < N; i++)
            for(j = i-ecart; (j >= 0) && ( *(p+j) > *(p+(j+ecart)) ); j -= ecart)
            {
                tmp = *(p+j);

  • (p+j) = *(p+(j+ecart));
  • (p+(j+ecart)) = tmp;
} return; } int main() { int nb[128], N, i; scanf("%d", &N); printf("---------\n"); for(i = 0; i < N; i++) scanf("%d", &(nb[i])); printf("---------\n"); trishell(nb, N); for(i = 0; i < N; i++) printf("%d\n", nb[i]); printf("---------\n"); //system("pause"); return 0; }

Conclusion :


Petite démo d'utilisation de la fonction dans main()

A voir également

Ajouter un commentaire

Commentaires

coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
27 -
perso, j'ai regardé vite fait ton code, ça doit être efficace...
je n'ai pas compris comment ça marche...
tu pourrais détailler ton code stp?
cs_krust
Messages postés
140
Date d'inscription
mercredi 3 juillet 2002
Statut
Membre
Dernière intervention
19 novembre 2006
-
Oui, comme dit coucou, décrit ton algorythme car c'est toujours bien d'expliquer le concepte ça aideà la compréention ;)
Donne aussi le type d'algorythme (par ex : O(n²) pour les algo ou le nombre d'instructions nécéssaire augmenter au caré etc...)
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
27 -
bah j'ai pas compris vraimzent pourquois ça fonctionne, mais ça fonctionne très bien...
C'est vraiment plus efficace que :
function tri(){
for ( i=1 ; i<5 ; i++ ) {
for ( j=i+1 ; j<6 ; j++ ) {
if (cartes[i]>cartes[j]){
a=cartes[i];
cartes[i]=cartes[j];
cartes[j]=a;
}
}
}
}
Quand on a que 5 cartes, c'est vrais que l'on ne voit pas la diférence de temps...
C'est une portion de code de mon jeu de poker en javascript...
Je fais bcp de jeux de cartes, l'un de mes jeu est sur tibasic, alors éviodement celui sur tibasic doit être farfaitement optimisé... (ma ti fait 15 mhtz et est vraiument lente pour certaines aplications)...
Donc voila, j'aimerais bien comprendre lequel de ces deux algorythme est le plus rapide, et comment fonctionne le votre merci.
kod32
Messages postés
46
Date d'inscription
mercredi 5 mai 2004
Statut
Membre
Dernière intervention
13 novembre 2004
-
Le Trishell est un algo de trie plu sperformant qu'un trie par insertion (tri par rotation). Pour plus de précision sur le trishell : http://www-ipst.u-strasbg.fr/ipst/deug-ti/aide-c/tris/trishell.htm

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.