Forum Clubic

Classer par ordre croissant n valeurs d'un tableau

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 :

  1. Déclare les variables quand tu t’en sers, surtout pour les types comme “int”
  2. 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)
  3. Les entêtes C++ c’est plutôt cstdio que stdio.h (voir mon lien plus haut).