Classement d'un chaine de char

divx78 Messages postés 115 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 21 mars 2009 - 10 nov. 2008 à 23:51
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 12 nov. 2008 à 19:23
bonjour a vous,

Voila je ne compren pas pourqoi il ne me classe pas par ordre alpha mon code est pourtant corecte ou je me trompre ce qui parai fortement probable :)
merci de votre aide

void    rev_alpha(char *str, int size)
{
  char  temp;
  char  *str2;

  if(str[size + 1])
    {
      if(str[size] > str[size + 1])
        {
          temp = str[size];
          str[size] = str[size + 1];
          str[size + 1] = temp;
          if(str[size + 1] != '\0')
            {
              size = size + 1;
              rev_alpha(str, size);
            }
          else
            {
              size = 0;
              rev_alpha(str, size);
            }
        }
      else
        {
          size = size + 1;
          rev_alpha(str, size);
        }
    }
}

int     main()
{
  char  tab[5] = "dcba";

  rev_alpha(tab, 0);
  printf("%s", tab);
}

Merci encore

2 réponses

divx78 Messages postés 115 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 21 mars 2009
11 nov. 2008 à 00:18
oki j'ai avance
sa marche mieu sauf que je me retrouve avec des caractere bizard entre le premier et le deuxieme mes il classe bien

void    rev_alpha(char *str, int size)
{
  char  temp;
  char  *str2;

  if(str[size + 1])
    {
      if(str[size] > str[size + 1])
        {
          temp = str[size];
          str[size] = str[size + 1];
          str[size + 1] = temp;
          if(str[size + 1] != '\0')
            {
              size = size + 1;
              rev_alpha(str, size);
            }
          else
            {
              size = 0;
              rev_alpha(str, size);
            }
        }
      //size = size + 1;                                                         
      rev_alpha(str, size+1);
    }
}

me retourn :
a???bcd(lasser_d@kill 1164)

hihihi
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
12 nov. 2008 à 19:23
Salut,

Il existe tout une gamme d'algo de tri, plus ou moins simples et plus ou moins rapides.

L'un d'eux, plutôt lent mais très simple s'appelle le tri à bulle. Il consiste à boucler sur la chaîne et à faire progresser les caractères plus élevés. On boucle tant que des caractères ont progressés dans la dernière boucle.

Côté perf, c'est du n², alors que le tri le plus rapide le quicksort est en moyenne en n*log(n).

Une implémentation naïve du tri à bulle :
<hr size="2" width="100%" />#include "stdio.h"
#include "stdlib.h"

void sort(char* lpText)
{
  int sorted;
  char* lpCurrent;
  char temp;
 
  if (lpText && (*lpText))
    do
    {
      sorted = 1;
      lpCurrent = lpText;

      /* Tant qu'il y a un caractère suivant */
      while (*(lpCurrent + 1))
      {
        if (*lpCurrent > *(lpCurrent + 1))
        {
          temp = *lpCurrent;
          *lpCurrent = *(lpCurrent + 1);
          *(lpCurrent + 1) = temp;
          sorted = 0;
        }
        lpCurrent++;
      }
    }
    while (! sorted);
}

int main(int argc, char*argv[])
{
  char  tab[5] = "dcba";

  sort(tab);
  printf("%s", tab);

  return 0;
}
0
Rejoignez-nous