begin process at 2012 02 12 06:30:00
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > ALGORITHME DE TRI D'UN TABLEAU PAR ORDRE CROISSANT OU DÉCROISSANT.

ALGORITHME DE TRI D'UN TABLEAU PAR ORDRE CROISSANT OU DÉCROISSANT.


 Information sur la source

Note :
5 / 10 - par 2 personnes
5,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Classé sous :tableau, croissant, decroissant, algorithme, tri Niveau :Débutant Date de création :13/03/2010 Date de mise à jour :14/03/2010 17:51:22 Vu / téléchargé :8 311 / 191

Auteur : Thuzhen

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Bonjour,
Le code source que je vais présenter est simple mais on y pense pas tout le temps.
Il classe un tableau par ordre décroissant (ou croissant avec une petite modification). Il utilise un algorithme très simple que j'ai sorti de ma tête mais si il doit probablement déjà exister.

Source

  • #include <stdio.h>
  • #include <stdlib.h>
  • void tri(int* tabl,int longueur);
  • int changer_pos(int *tabl1, int *tabl2);
  • int main()
  • {
  • int n;
  • int* numbers;
  • int _i;
  • scanf("%d\n", &n);
  • numbers = calloc(n, sizeof(int));
  • for(_i = 0; _i < n; ++_i)
  • scanf("%d", &numbers[_i]);
  • tri(numbers,n);
  • for(_i=0;_i<n;++_i)
  • printf("%d ",numbers[_i]);
  • free(numbers);
  • return 0;
  • }
  • void tri(int* tabl,int longueur)
  • {
  • int i, _i;
  • for(_i=0;_i<longueur;++_i)
  • {
  • for(i=0;i<longueur-1;i++)
  • {
  • if(tabl[i] > tabl[i+1])
  • {
  • changer_pos(&tabl[i],&tabl[i+1]);
  • }
  • }
  • }
  • }
  • int changer_pos(int *tabl1, int *tabl2)
  • {
  • int inter = 0;
  • inter = *tabl1;
  • *tabl1 = *tabl2;
  • *tabl2 = inter;
  • }
#include <stdio.h>
#include <stdlib.h>

void tri(int* tabl,int longueur);
int changer_pos(int *tabl1, int *tabl2);

int main()
{
    int n;
    int* numbers;
    int _i;

    scanf("%d\n", &n);
    numbers = calloc(n, sizeof(int));
    for(_i = 0; _i < n; ++_i)
        scanf("%d", &numbers[_i]);



    tri(numbers,n);

    for(_i=0;_i<n;++_i)
        printf("%d ",numbers[_i]);

    free(numbers);

    return 0;
}


void tri(int* tabl,int longueur)
{
    int i, _i;
    for(_i=0;_i<longueur;++_i)
    {
        for(i=0;i<longueur-1;i++)
        {
            if(tabl[i] > tabl[i+1])
            {
                changer_pos(&tabl[i],&tabl[i+1]);
            }
        }
    }
}

int changer_pos(int *tabl1, int *tabl2)
{
    int inter = 0;

    inter = *tabl1;
    *tabl1 = *tabl2;
    *tabl2 = inter;
}

 Conclusion

UTILISATION :

On rentre le nombre de données que nous allons entrer, puis on entre ces données qui vont ensuite être triées par ordre croissant.

PRINCIPE :

On compare le nombre de position i dans un tableau avec le nombre de position i+1 excepté si i est égal au nombre de donnés entrées dans le tableau.
Si le nombre de position i est plus grand, rien ne se passe, si c'est le contraire, ces deux nombres échangent leur position grâce à la fonction changer_pos().
Ces étapes se répètent autant de fois qu'il y a de nombres entrés.

REMARQUES :

On peut trier les nombres par ordre croissant en modifiant simplement le "if(tabl[i] < tabl[i+1])" en "if(tabl[i] > tabl[i+1])"
On peut inclure les nombres à virgule flottante (double) en modifiant la ligne de déclaration du tableau (remplacer int par double);

Voilà, j'espère que je vous ai aidé un peu et n'hésitez pas si vous avez une remarque ou un commentaire.
Informatiquement,
Thüzhen.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • Capture.jpgTélécharger ce fichier [Réservé aux membres club]Voir ce fichier51 780 octets
  • Capture.PNGTélécharger ce fichier [Réservé aux membres club]Voir ce fichier8 002 octets
  • main.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier861 octets
  • tri.cbpTélécharger ce fichier [Réservé aux membres club]1 048 octets
  • tri.dependTélécharger ce fichier [Réservé aux membres club]239 octets
  • tri.layoutTélécharger ce fichier [Réservé aux membres club]238 octets
  •   obj
    •   Debug
      • main.oTélécharger ce fichier [Réservé aux membres club]5 385 octets

Télécharger le zip


 Historique

13 mars 2010 22:32:50 :
Ajout d'une remarque sur les virgules correction de fautes syntaxiques.
14 mars 2010 11:26:10 :
Allocation dynamique corrigée. Suppression d'une condition inutile
14 mars 2010 17:51:22 :
Libération de la mémoire empruntée par le tableau. Changement de position d'une boucle.

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture RÉSOLUTION SUDOKU (9X9) PAR BACKTRACKING RÉCURSIF INTELLIGEN... par Gallien69
Source avec Zip COMBSORT ALGORITHME DE TRI SIMPLE RAPIDE NON-RECURSIF par xtremejames183
Source avec Zip LIBRAIRIE CONTENANT UNE TRENTAINE D'ALGORITHMES DE TRI par xkamen
TRI CROISSANT ET DÉCROISSANT D'ENTIERS par mwalimu

Commentaires et avis

Commentaire de gnairod le 14/03/2010 12:06:22 5/10

C'est un tri à bulles, c'est sans intérêt dès lors que n > 7 car la complexité de l'algorithme est dans le cas moyen proportionnel à 1/2 * n^2, de plus il existe beaucoup de source sur cet algorithme. Essaye de proposer quelque chose avec plus d'intérêt. Je te mets la moyenne pour la note.

Commentaire de Thuzhen le 14/03/2010 17:57:43

C'est vrai que je pourrais l'optimiser en évitant la répétition de scan des nombres déjà classés, mais je pense que apars diminuer le temps d'exécution déjà très court ça ne servirait à rien. C'est vrai que la différence est visible au bout d'un certain moment mais bon...
Sur ce je te remercie de m'avoir donné le nom et d'avoir apport une critique objective.
Informatiquement,
Thüzhen.

Commentaire de Kevin95870 le 15/03/2010 14:54:06

bonjour,

essai de regarder du côté des tris par distribution.

Commentaire de uaip le 16/03/2010 01:00:57

Salut,
Gnairod m'a devancé quant au nom de tri à bulle.
Info : &tabl[i] devient tabl+i (à mon avis, c'est un détail parmi d'autre qui permet d'accélérer le temps d'exécution).

Commentaire de thebroyeur le 16/03/2010 18:48:47 5/10

Simple tri à bulle comme il a déjà été dit. Essaye de regarder les tri fusions par exemples merge sort en anglais ;)

Commentaire de Thuzhen le 17/03/2010 16:33:34

Merci pour ces avis qui m'ont pas mal aidé :)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Questions urgentes en Algorithme et Complexité [ par nostalgieing ] bonjour j'ai une ambiguté en algorithme et complexité et j'ai quelques questions à poser et j'ai besoin de vos aide c'est urgent 1-quelle est la met tri de tableau de structure [ par samhmi ] Je veux trier un tableau de structure selon le degre décroissant tel que chaque case est de structure suivantestruct sommet{    int degré;    int arc[ Tri décroissant de tableau [ par enoitnaillal ] Bonjour, J’ai trouvé une variante de sort() : std ::sort (tb.begin(), tb.end(), std ::greater ()); permettant du faire un tri décroissant, (je travail Algorithme de groupage [ par MoknineMoknine ] Bonjour: je un tableau de nombre real. je veut un algorithme ou méthode pour regrouper ces nombres telque chaque groupe doit contenir les nombres qui TABLEAU de STRUCTURE [ par timy94 ] Bonjour Comment en C faire un tableau de pointeur pointant sur des structures.dans le but de trier ce tableau ex "tab.nom"  en modifiant les adresses algorithme de tri hoare [ par alinformatik ] au cours des travaux pratiques en module de système d'exploitation, pour comprendre la synchronisation des processus sous linux on nous a demandé d'éc algorithme [ par petitlapino ] Salut tout le monde, j'ai un exercice qui demande de calculer la somme d'un tableau en c++ deux à deux par exemple t[1]=2 t[2]=5 t[3]=3 t[4]=9 t[5]=6 Tri appliqué à un tableau à 2 dimensions basé sur la 2nde dimension [ par Askirkela ] Bonjour à tous. Premièrement, j'espère que ce message est au bon endroit (qui m'a parut le plus logique, bien que l'algorithmique soit de mise). Deuxi Algorithmes de tri [ par goutu ] Bonsoir, je fait une étude sur les différents algorithmes de tri, j'en ai réécrit plusieurs, en m'inspirant de certains messages de ce site. J'ai appr Complexité de l'algorithme de Tri Fusion [ par ousin ] Salut tout le monde, je voudrais de l'aide pour demontrer mathematiquement en urilisant la resolution des reccurences que la complexité du Tri Fusion


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,449 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales