Tableau et tri à bulles
Lewisdu76
Messages postés
108
Statut
Membre
-
fiddy Messages postés 11653 Statut Contributeur -
fiddy Messages postés 11653 Statut Contributeur -
Bonjour, j'ai cet exercice à rendre pour lundi seulement je suis completement paumé pouvez vous m'aidez? Merci !
La fonction suivante permet de mettre dans un tableau n nombres aléatoires.
void alea(int a[],int n)
{
int i;
srand(1);
for (i=0;i<n;i++) a[i]=rand()/100;
}
Écrire une fonction permettant d'afficher les n éléments du tableau.
Tri à bulles:
On effectue un certain nombre de parcours du tableau à classer, un parcours consiste à aller d'un bout à l'autre du tableau en effectuant la comparaison de deux éléments successifs et en les permutant s'ils ne sont pas classés. Cette comparaison remonte dans le tableau comme une bulle, en entraînant l'extremum.
A l'issue du premier parcours, l'élément 48 est à sa place.
On peut améliorer le tri par bulles en limitant les parcours à la partie non triée du tableau :
après un parcours, l'élément maximal est rangé, le deuxième parcours peut donc être limité à n-1 positions. Après deux parcours, les deux plus grands éléments sont classés, le troisième parcours peut être limité à n-2 positions etc...
Écrire la procédure tri_bulles(n,A) permettant de trier par la méthode bulles le tableau A.
La fonction suivante permet de mettre dans un tableau n nombres aléatoires.
void alea(int a[],int n)
{
int i;
srand(1);
for (i=0;i<n;i++) a[i]=rand()/100;
}
Écrire une fonction permettant d'afficher les n éléments du tableau.
Tri à bulles:
On effectue un certain nombre de parcours du tableau à classer, un parcours consiste à aller d'un bout à l'autre du tableau en effectuant la comparaison de deux éléments successifs et en les permutant s'ils ne sont pas classés. Cette comparaison remonte dans le tableau comme une bulle, en entraînant l'extremum.
A l'issue du premier parcours, l'élément 48 est à sa place.
On peut améliorer le tri par bulles en limitant les parcours à la partie non triée du tableau :
après un parcours, l'élément maximal est rangé, le deuxième parcours peut donc être limité à n-1 positions. Après deux parcours, les deux plus grands éléments sont classés, le troisième parcours peut être limité à n-2 positions etc...
Écrire la procédure tri_bulles(n,A) permettant de trier par la méthode bulles le tableau A.
A voir également:
- Tri bulle c
- Comment faire un tri personnalisé sur excel - Guide
- Logiciel tri photo - Guide
- Whatsapp couleur bulle - Accueil - Messagerie instantanée
- Video bulle whatsapp - Accueil - Messagerie instantanée
- Info bulle excel ✓ - Forum Excel
8 réponses
En pseudo-code:
procédure tri_bulle(tableau T, entier n)
répéter
échange_effectué = faux
pour j de 0 à n - 2
si T[j] > T[j + 1], alors
échanger T[j] et T[j + 1]
échange_effectué = vrai
tant que échange_effectué
fin procédure
Merci pour ton aide. Ca c'est la fonction que j'ai à créer pour faire le tri? J'ai esssayé de on coté avec des morceaux de cours mais ca donne pas grand chose... Regarde :
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n=10, A[100];
alea (A,n);
affichage (A,n);
Tri (A,n);
affichage (A,n);
return (0);
}
void alea(int A[],int n)
{
int i;
srand(1);
for (i=0;i<n;i++) A[i]=rand()/100;
}
void Tri (int A[],int n )
{
int j;
int i;
for( j=0,j<n-1,j++)
for(i=0,i<n-j-1,i++)
if(A[i]>A[i+1])echange (&A(i),&A(i+1));
}
void echange (int*x,int*y)
{
int k,h;
h=*x;
*x=*y;
*y=k;
}
void affichage(int n,float A[100])
{
int i;
for (i=0;i< n;i++) printf("A[%d] = %f\n",i,A[i]);
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n=10, A[100];
alea (A,n);
affichage (A,n);
Tri (A,n);
affichage (A,n);
return (0);
}
void alea(int A[],int n)
{
int i;
srand(1);
for (i=0;i<n;i++) A[i]=rand()/100;
}
void Tri (int A[],int n )
{
int j;
int i;
for( j=0,j<n-1,j++)
for(i=0,i<n-j-1,i++)
if(A[i]>A[i+1])echange (&A(i),&A(i+1));
}
void echange (int*x,int*y)
{
int k,h;
h=*x;
*x=*y;
*y=k;
}
void affichage(int n,float A[100])
{
int i;
for (i=0;i< n;i++) printf("A[%d] = %f\n",i,A[i]);
}
Le C ce n'est pas juste de l'assemblage de code...
Tu utilises void affichage(int, float) alors que ton tableau est en int... Il faut au moins une certaine cohérence.
Pour la fonction Tri, Heliotte t'a donné le pseudo-code, encore faut-il respecter l'algorithme. Ce que vous avez écrit n'est pas du tri à bulle.
Ta fonction echange() est fausse. Tu fais *y=k. Alors que k vaut n'a pas été initialisé... Cette ligne est à revoir.
Et enfin, il ne faut pas oublier de déclarer tes variables avant de les appeler. Sinon ton compilateur va raler.
Tu utilises void affichage(int, float) alors que ton tableau est en int... Il faut au moins une certaine cohérence.
Pour la fonction Tri, Heliotte t'a donné le pseudo-code, encore faut-il respecter l'algorithme. Ce que vous avez écrit n'est pas du tri à bulle.
Ta fonction echange() est fausse. Tu fais *y=k. Alors que k vaut n'a pas été initialisé... Cette ligne est à revoir.
Et enfin, il ne faut pas oublier de déclarer tes variables avant de les appeler. Sinon ton compilateur va raler.
Le tri à bulles devrait ressembler à :
void Tri(int A[],int n)
{
int i,j,iTemp;
bool EchangeEffectue;
EchangeEffectue=true;
while(EchangeEffectue)
{
EchangeEffectue=false;
for (i=0 ; i<n-j-1 ; i++)
{
if (A[i] >= A[i+1])
{
iTemp=A[i];
A[i]=A[i+1];
A[i+1]=iTemp;
EchangeEffectue=true;
}
}
}
}
1) Pas besoin de pointeur à ton niveau.
2) Tu te permet de sauter les acolades des bloques conditionnels et des boucles, chose fortement deconseillé même pour les programmeurs expérimentés.
3) Ta fonction alea n'est absolument pas aléatoire, cherche sur le net des exemples.
2) Tu te permet de sauter les acolades des bloques conditionnels et des boucles, chose fortement deconseillé même pour les programmeurs expérimentés.
3) Ta fonction alea n'est absolument pas aléatoire, cherche sur le net des exemples.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour vos aides et désolé si je vous choque par mon travail ^^ Je trouve que le prof commence bien trop fort pour des étudiants qui ont jamais vu ça...
Ah lol Quelqu'un aurait il la gentillesse de me proposer un programme complet? Je ne parvient pas à corriger les erreurs :/
T'arrives pas à traduire le code d'Héliotte en C ??
Un tuto sympa pour débuter : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c
Un tuto sympa pour débuter : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c
Alors voilà ce que j'ai, le programme marche seulement la fonction aléatoire non comment faire pour généner des chiffres aléatoire et non fixés?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int A[100];
int n=10;
alea(A,n);
affichage(A,n);
Tri(A,n);
affichage(A,n);
return(0);
}
void alea(int A[],int n)
{
int i;
srand(1);
for (i=0;i<n;i++) A[i]=rand()/100;
}
void affichage(int A[], int N)
{
int i;
for (i=0 ; i<N ; i++)
printf("%d\n",A[i]);
printf("\n\n");
}
void Tri(int A[],int n)
{
int i,j;
for (j=0;j<n;j++)
for (i=0 ; i<n-j-1 ; i++) if (A[i] >= A[i+1]) echange(&A[i],&A[i+1]);
}
void echange(int*x,int*y)
{
int k;
k=*x;
*x=*y;
*y=k;
}