KX
Messages postés16733Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention31 janvier 2024127 2 nov. 2014 à 14:04
Bonjour,
Je ne suis pas forcément le plus à l'aise en C, mais si je comprends bien tu as juste remplacer un int[] par un int* mais ça ne veut pas dire que tu tries avec des pointeurs, car ce que tu déplaces ce sont toujours les valeurs du tableau, pas des pointeurs.
Il faudrait plutôt que tu ais un (int*)[] où chaque case serait un pointeur, et où tu comparerais la valeur associée au pointeur mais déplacerais uniquement le pointeur.
Remarque : dans l'absolu utiliser des pointeurs pour des int c'est overkill.
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 2 nov. 2014 à 19:38
@KX: Ce qu'il a fait, lui permet bien d'utiliser des pointeurs (ou plutôt un arithmétique des pointeurs) au lieu d'un accès indexé (il ne parle pas changer le type contenu dans le tableau de int vers int*, mais de manipuler un tableau en mode pointeurs et non en mode indexé).
Je pense qu'il veut utiliser des pointeurs pour des int, uniquement parce que ça doit être un exercice scolaire. Il y n'y pas de réel avantage d'une méthode à l'autre.
@thyobes7: Le souci que tu as, est que tu ne sembles pas à l'aise avec les pointeurs. Ca se voit à l'écriture "for (p = n - 1". "p" étant un pointeur, et "n" un entier, ça commence déjà mal... Il aurait fallu écrire p = tab + n - 1. Je me suis permis de réécrire la partie de tri, pour coller un peu plus à ce qu'on attend généralement par un tri utilisant de l'arithmétique de pointeurs.
#include <stdio.h>
#include <stdlib.h>
void swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void bubble_sort(int* tab, int size)
{
int* p = tab;
int* end = tab + size;
int any_change = 1;
while (any_change)
{
p = tab;
any_change = 0;
while (p != end - 1)
{
if (*p > *(p + 1))
{
swap(p, p + 1);
any_change = 1;
}
++p;
}
}
}
void show(int* tab, int size)
{
int i = 0;
for (i = 0; i < size; ++i)
printf("%i ", tab[i]);
printf("\n");
}
int main()
{
int tab[] = {8, 3, 1, 5, 2};
int size = sizeof (tab) / sizeof (*tab);
int* alloc_tab = malloc(3 * sizeof (int));
alloc_tab[0] = 3;
alloc_tab[1] = 1;
alloc_tab[2] = 2;
show(tab, size);
bubble_sort(tab, size);
show(tab, size);
show(alloc_tab, 3);
bubble_sort(alloc_tab, 3);
show(alloc_tab, 3);
free(alloc_tab);
return 0;
}