Bonjour à tous,
je dois écrire un programme en C++ qui affiche 10 nombres aléatoires dans un tableau puis qui les classe par ordre croissant.
j’ai réussie la première partie mais la deuxième me pose problème, pouvez-vous m’aider?
code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
int main()
{
int tableau_aleatoire[N];
int i,j=0;
srand(time(NULL));
for(i=0;i<N;i++)
{ j=rand()%100;
tableau_aleatoire[i]=j;
printf("|%d| ",tableau_aleatoire[i]);
}
return 0;
}
void tri_insertion(int*tableau_aleatoire,int n){
int i,p,j;
int x;
for(i =1; i < n; i++)
{x = tableau_aleatoire[i];p = i-1;
while(tableau_aleatoire[p] > x && p-- >0)
{}p++;
for(j = i-1; j >= p; j–)
{tableau_aleatoire[j+1] = tableau_aleatoire[j];}tableau_aleatoire[p] = x;}
}
affiche:|47| |15| |8| |15| |13| |40| |97| |23| |59| |14|
Le tri de “base”, c’est celui par recherche des minimum.
En gros:
for (int i = 0; i < n; ++i) {
int min = tab[i];
int minIndex = i;
// on commence après car les valeurs d'avant sont triées.
for (int j = i+1; j < n; ++j) {
if (tab[j] < min) {
minIndex = j;
min = tab[j];
}
}
if (minIndex != i) {
tab[minIndex] = tab[i];
tab[i] = min;
}
}
Et un truc qui marche : cpp.sh…
j’ai testé votre code, mon programme marche mais je dois utiliser le tri par insertion avez-vous un programme pour celui-ci?
Ton code marche : cpp.sh…
Tu as l’algo complet ici : fr.wikipedia.org…
Sa traduction en C++ ne devrait pas être difficile (en gros, tu fais une boucle de trop dans ton code).
Par contre, si tu codes en C++ et parce que ça sert à l’avenir :
- Déclare les variables quand tu t’en sers, surtout pour les types comme “int”
- Utilise std::cout et évite printf (bien sûr, cette fonction reste pratique mais pour la plupart des cas std::cout offre plus de sécurité et fonctionne avec quasiment tout types)
- Les entêtes C++ c’est plutôt cstdio que stdio.h (voir mon lien plus haut).