2013-06-13 5 views
0

Désolé d'avoir ouvert un autre sujet avant que je résolve mon autre problème. Ce problème est plus important. Je ne sais pas si quelqu'un comprendra mon code parce que je l'ai traduit en anglais. Le programme fonctionne comme une liste de commandes sur Internet ou quelque chose comme ça. Vous pouvez ajouter des commandes, les supprimer, les trier par ID ou Date, vous pouvez les enregistrer et les charger. Le tri par date est mon problème. Par exemple, j'ajoute des dates comme 2013, 2011 et 2012. Quand j'essaie de les trier, rien ne se passe, ils restent dans le même ordre. Si quelqu'un comprend ce pls dites-moi quel est le problème? C'est un projet scolaire et je dois le réparer jusqu'à demain. Quelqu'un peut-il m'aider avec ça?Tri par date numéro

// according = 1 (Date) 2 = (Price) 
void sort(int accor) 
{ 
    int i,j,replace=0; 
    ORDER *Pom; 

    for(i=0;i<Piece-1;i++){ 
     for(j=0;j<Piece-1;j++){ 
      if(according == 1){ 
       if(strcmp(Item[j]->Date, Item[j+1]->Date) > 0) 
        replace = 1; 
       else 
        replace = 0; 
      }else if(according == 2){ 
       if(Item[j]->Price > Item[j+1]->Price) 
        replace = 1; 
       else 
        replace = 0; 
      } 
      if(replace){ 
       Pom = Item[j]; 
       Item[j] = Item[j+1]; 
       Item[j+1] = Pom; 
      } 
+0

Un nitpick mineur: 'Item [j +] -> Date' devrait être' Point [j + 1 ] -> Date'. – user2448027

+0

Essayez d'utiliser 'i' au lieu de' j + 1' et avant d'échanger des éléments, vérifiez que 'i' n'est pas égal à' j'. J'espère que cela pourra aider. – user2448027

+0

Quel type est 'Item []'? Tableau de 'ORDER *'? –

Répondre

0

Modifiez les boucles pour être comme les suivantes:

for (i = (Piece - 1); i > 0; i--) 
{ 
    for (j = 1; j <= i; j++) 
    { 
    // compare and swap 
    } 
} 

Source: http://www.algorithmist.com/index.php/Bubble_sort.c

+0

J'ai essayé cette solution aussi, mais cela n'a pas fonctionné. j-1 a corrigé le problème de date, mais ID est le problème maintenant, il plante tout le temps – eduroam

+0

@eduroam Avez-vous également remplacé le 'j + 1' par' j-1' dans la partie où vous trier par ID? La raison de l'écrasement est probablement qu'un certain indice de tableau est hors limite, c'est-à-dire plus petit que 0 et plus grand que la taille-1. – user2448027