void free_list(struct node *head) {
//struct node *releasep;
//while( head! = NULL){
// releasep = head;
// head = head->next;
//
// free(releasep->value);
// free(releasep);
//}}
J'ai des problèmes avec ma méthode de tri. J'y suis même allé étape par étape et je ne trouve pas le problème. Ci-dessous se trouve la sortie de mon programme. XXXXXXX@linus:~/350/c_memory_activity$ gcc -o test listsort. c
XXXXXXX@linus:~/350/c_memory_activity$. /test
List: 9 1 5 2 8 3
List: 1 9 5 2 8 3
XXXXXXX@linus:~/350/c_memory_activity$
PS: l'algorithme de tri d'origine était ici: tri par insertion de liste chaînée
Eh bien, cette boucle n'ira qu'une seule fois (dans le bon cas):
Puisqu'il s'agit de devoirs, juste un indice: qui est tmpNxt et lequel est tmpPtr après la première itération? les autres lignes à regarder sont celles-ci:
tmpNxt = tmpNxt->next;
les deux exemples expliquent pourquoi seuls les deux premiers éléments ont été remplacés dans votre exemple. MByD a déjà signalé le problème (mon vote positif pour vous, MByD), donc avec cela résolu, j'aimerais apporter quelques conseils.
- Tri par insertion java
Tri Par Insertion Java
Tris: tri par insertion
précédent |
suivant |
table des matières
Cest une forme dégénérée du tri par fusion. Ce tri est utilisé pour trier un ensemble représenté en mémoire vive. Cest un tri qui est intéressant dans le cas où le tableau à trier est déjà presque ordonné. La division de E en deux sous parties E1 et E2 se fait de la façon suivante: si l'ensemble E a n éléments, les n-1 premiers sont rangés dans E1 et le dernier est rangé dans E2. L'algorithme est alors une forme dégénérée du schéma initial, et son temps de calcul est dans. La fonction de fusion de deux ensembles ordonnés devient, dans ce cas dégénéré, une procédure d'insertion d'un élément dans un ensemble ordonné. La fonction suivante insère l'élément e dans la partie de tableau qui va de l'indice 0 à n-1. Cette partie est ordonnée. public static void insertionR( int [] t, int n, int e) {
if ((n == 0) || (e >= t[n - 1]))
t[n] = e;
else {
t[n] = t[n - 1];
insertionR(t, n - 1, e);}}
La forme itérative de cette procédure est:
public static void insertionI ( int t[], int n, int e){
int i;
for (i=n; ((i!
Faut l'appeler "taille", merde, quoi. Parce que 4 ou 5 variables comme ça, et c'est foutu, on perd une énergie monstrueuse à se souvenir, au lieu de travailler sur la signification du code. Et si on demande de l'aide à quelqu'un, il va se barrer en courant en voyant le travail de sagouin.