[langage C] probleme sur les trie

burinho@yahoo.fr -  
 angeloflove -
Bonjour,

je suis en train de voir les trie en c mais apparament mon j'ai du me planté car il me donne une erreur de sgmentation.


int taille=4;
int tab1[]={2,5,3,9};

int i=0;
	for(i=0; i<tab1[taille-1];  i++)
	{

	printf(" %d",tab1[i]);

		if (tab1[i]>tab1[i+1])
		{
			int temp=0;
			temp=tab1[i];
			tab1[i+1]=tab1[i];
			tab1[i+1]=temp;
                }
	                
	}

        for (i=0; i<4; i++);
        {
        
        printf("%d",tab1[i]);
        
        
        }




10 réponses

  1. kid paddle
     
    SAlut

    essaie de placer l'init de temp au début de ton programme
    0
  2. jamel_theone Messages postés 61 Statut Membre 20
     
    Si tu programmes en C ISO, les declarations de toutes tes variables locales doivent se faire au debut de la fonction.

    Sinon petites remarques :

    Dans ton "if" tu fais
                            temp=tab1[i];
    			tab1[i+1]=tab1[i];
    			tab1[i+1]=temp;
    


    mais je crois que ce qu'il faut faire c'est plutot
                            temp=tab1[i];
    			tab1[i]=tab1[i+1];
    			tab1[i+1]=temp;
    


    Si t'as un tableau de ce style :
    int tab1[]={2,5,3,9,1};
    


    ton programme ne triera pas correctement ;-)
    0
  3. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  4. jamel_theone Messages postés 61 Statut Membre 20
     
    Ce que fais ton algo c'est parcourir UNE seule fois le tableau, quand le contenu de l'indice courante est superieur au contenu de l'indice qui suit, tu permutes...ok, mais si t'as un tableau qui a l'origine est comme ca :
    {2,5,3,9,1}

    à la sortie tu aura cela
    {2,3,5,1,9}

    et tu vois donc qu'il n'est pas correctement trié (tu peux faire la trace de ton algo à la main pour verifier)

    Une solution consisterai à faire 2 boucles "for" imbriquées mais bon en terme de ce qu'on appelle "la compléxité" je trouve que ca fait trop...ca justifie le fait que l'on utilise d'autre algorithme de trie, dont la complexité est moindre (pour info, la compléxité permet grosso modo de savoir si un probleme peut etre résolu efficacement)
    0
  5. agnès
     
    mmh, arrêtez-moi si je me trompe, mais dans la ligne :
    for(i=0; i<tab1[taille-1];  i++)

    tu fais faire ta boucle de 0 à tab1[taille-1]-1. Or dans ton exemple, tab1[taille-1] = 9. Donc tu lui demande de lire jusqu'à la 9e case d'un tableau qui n'en contient que 4... je sais pas ce qu'il y a trouvé...
    C'est pas plutôt
    for(i=0; i<taille;  i++)

    qu'il te faut?
    0
  6. burinho@yahoo.fr
     
    si en effet c'est plus correct comme ça
    for(i=0; i<taille; i++).

    par contre tab1[taille-1] = n'est pas egal 9 case mais 4ème.
    0
    1. Mohamed Amine
       
      il faut mettre une autre boucle dans l ancienne comme ça

      temp=t[i];
      for(i=0;i<n-1;i++) ou n et la limite du tab
      { for(j=i+1;j<n-2;j++)
      { if (t[i]>t[j])
      { temp=t[i]; t[i]=t[j]; t[j]=temp; }
      }
      }
      0
  7. agnès
     
    Pas convaincue.. Quand tu appelles tab1[n], il t'affiche la valeur contenue dans la case n° n de ton tableau tab1 (cf http://chgi.developpez.com/pointeur/).

    Rq : je te conseille ce site : www.developpez.com , il y a plein de tutoriels et des FAQ très bien faits, et le forum est fréquenté par des ingénieurs informaticiens et des étudiants en informatique très calés.
    0
  8. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    essaie plutôt
    #include<stdio.h>
    #define TAILLE 4
    
    int main ()
    {
      int tab[] = { 2, 5, 3, 9 };
      int i, k, temp;
      for (i = 0; i < TAILLE; i++){
          k = i;
          while (k > 0 && tab[k] < tab[k - 1]){
              temp = tab[k - 1];
              tab[k - 1] = tab[k];
              tab[k] = temp;
              --k;
          }
      }
      for (i = 0; i < TAILLE; i++)
        printf ("%d", tab[i]);
      printf("\n");
      return 0;
    }
    Mais ça sera utilie de voir un peu
    algo tri
    Algorithme de tri
    0
  9. angeloflove
     
    salut tt le monde .jai un kestion et jespere que klk1 fai moi un plair par me repondre car de main jai un DS sur les tableauxet surtt commn trier un tableau et jai po bien compris au debut qsq cest que "temp" puis le passage de commen trier un tableau te merci
    0