2013-02-14 1 views
0
void insert(struct EMP* emp[]) 
{ 
    struct EMP* previous = NULL; 
    struct EMP* current = top; 

    int i; 
    int j; 

    previous = current; 
    current = current -> next; 

    for(i = 1; i < numEmps; i++) 
    { 
     j = i; 
     while(j > 0 && previous -> id > current -> id) 
     { 
      previous = current; 
      j--; 
     } 

     current = current -> next; 
    } 
} 

Donc, le paramètre est un tableau non ordonné, et je veux le trier en utilisant un tri par insertion. Ce qui me pose problème, c'est qu'il faut des listes chaînées. Aucune suggestion? Ci-dessus est ma fonction de tri d'insertion existante qui ne fonctionne pas.C - Tri par insertion utilisant une liste chaînée avec un tableau non ordonné

+4

Bien sûr que cela ne fonctionne pas, vous utilisez 'previous' alors que c'est toujours' NULL'. –

+0

Je pense que précédent = courant = top donc pas de problème là-bas. – Elemental

+0

J'ai ajouté où le précédent est égal au courant, alors le courant est égal au suivant .... Il construit et fonctionne, mais rien ne change au tri. Des idées? –

Répondre

0

Je pense que vous devez regarder plus attentivement l'algorithme de tri d'insertion. En substance, il nécessite une nouvelle liste de cibles auxquelles ajouter des éléments (en particulier, vous insérez les éléments au bon endroit lorsque vous construisez cette deuxième liste). Donc, au cœur de votre malentendu est l'idée que cela peut être fait «sur place» sur une seule liste.

Il serait plus facile et plus simple d'implémenter cette deuxième liste sous forme de liste chaînée, car vous devez être capable d'insérer efficacement des éléments dans la liste à un point arbitraire.

Questions connexes