Tri par insertion - assez urgent

Fermé
davy2006 - 14 janv. 2014 à 15:42
Froulik Messages postés 3750 Date d'inscription lundi 11 novembre 2013 Statut Membre Dernière intervention 15 avril 2014 - 14 janv. 2014 à 18:50
Bonjour,




Bonjour

J'ai un algorithme à faire, c'est un peu urgent, c'est le tri par insertion. Je l'ai fait, mais il est super long, et mon prof me dit que c'est bien plus simple, c'est, je crois, quelque chose qui ressemble à ce qui a été posté ici plus haut, mais je ne comprends pas. Je poste l'énoncé

Tri par insertion : écrivez un programme qui demande à l'utilisateur de saisir une série de nombres entiers positifs ou négatifs. A chaque saisie, on insère la nouvelle valeur au bon endroit dans un tableau déclaré auparavant de manière à ce que le contenu de ce dernier soit toujours trié. La saisie s'arrête lorsque le tableau est rempli.
Principe : à chaque lecture d'un nouveau nombre, on parcourt les valeurs qui se trouvent déjà dans le tableau concerné jusqu'à trouver une valeur plus grande ou jusqu'à atteindre la fin de la liste des nombres déjà traités. Dès que l'on a trouvé une place, on décale toutes les valeurs nécessaires de manière à libérer l'emplacement et y insérer la nouvelle valeur. Le tableau continue ainsi à être ordonné.

Moi, je vois ceci
http://algo.developpez.com/sources/?page=tri#tri_insertion


Entrée :

Sélectionnez

T : tableau de nombre indexé de 1 à n
Sortie :

Sélectionnez

T trié
Pseudo-Code :

Fonction principale :

Sélectionnez

POUR i de 2 à n FAIRE
INSERE( T , i-1, T[i] )
FIN POUR

Fonction INSERE(T, k , val )

Sélectionnez

i <- k
TANT QUE i > 0 et T[i] > val
T[i+1] <- T[i]
i <- i - 1
FIN TANT QUE
T[i+1] <- val

Je ne comprends pas. Je suis en 1ière bach info, et on voit le métalangage

J'ai besoin de l'algorithme suivant



Programme_tri_par_insertion

Variables

tab : Tableau (80) de nombre
i, j,val : nombre

Début


Afficher "Entrez une valeur"
Saisir tab[0]
Afficher "Entrez une valeur"
Si (val >= tab [0]) alors
tab[1] <-- val
Sinon
tab[1] <-- tab[0]
tab[0] <-- val
FinSi

Pour i <-- 2 à 79
Afficher "Entrez une valeur"
Tri_insertion(tab, i)
Fin Pour

Pour i <-- 0 à 79
Afficher tab[i]
Fin Pour
Fin


Procédure Tri_insertion (tab2 : Tableau [80] de nombre, j : nombre)
***
***
***
***
Fin Procédure


Merci de m'aider à faire mon tri par insertion.

Un tout grand merci, encore merci. C'est assez urgent, merci beaucoup.

Davy
A voir également:

7 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
14 janv. 2014 à 15:48
Bonjour,

Regarde >> ici << et tu comprendras mieux !!!
0
Désolé, j'ai oublié de préciser ce qui allait à la place des étoiles.

Voici mon algo en java.

import java.util.*;
public class testttest {

public static void main(String[] args) {
Scanner lectureclavier=new Scanner(System.in);
int taille, i, j, val;
System.out.println("Entrez la taille du tableau");
do{
taille=lectureclavier.nextInt();
}while(taille<1);
int tab [];
tab = new int [taille];

System.out.println("Entrez une valeur");
tab[0]=lectureclavier.nextInt();
System.out.println("Entrez une valeur");
val=lectureclavier.nextInt();
if(val >= tab[0]){
tab[1]=val;
}else
{
tab[1]=tab[0];
tab[0]=val;
}

for(i=2;i<taille;i++)
{
System.out.println("Entrez une valeur");
val=lectureclavier.nextInt();
tri_insertion(tab,i,taille,val);
}
for(j=0;j<taille;j++)
{
System.out.print(" "+tab[j]);
}
}

public static void tri_insertion(int tab2 [], int h,int taille2,int val2){
int j;
j=h;
while((j>0) && tab2[j]>val2){
tab2[h+1]=tab2[j];
j--;
}
tab2[j+1]=val2;
}
}

merci à ceux qui voudront bien m'aider

Davy
0
Froulik Messages postés 3750 Date d'inscription lundi 11 novembre 2013 Statut Membre Dernière intervention 15 avril 2014 941
14 janv. 2014 à 18:18
Désolé mais CCM ne peut pas répondre favorablement à ta demande.
Regarde ici :
https://www.commentcamarche.net/infos/25899-demander-de-l-aide-pour-vos-exercices-sur-ccm/

Polux31 te l'a déjà dit, pourtant !
0
ok, mais je fais comment pour avoir de l'aide ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Froulik Messages postés 3750 Date d'inscription lundi 11 novembre 2013 Statut Membre Dernière intervention 15 avril 2014 941
14 janv. 2014 à 18:27
eh bin... tu attends que quelqu'un passe par ici et veuille bien te donner un coup de main.
bonne chance :o)
0
merci quand même, je crois avoir trouvé la solution (en regardant mieux l'algo)
il faut mettre ceci dans la procédure

int i=k;

while((i>=0) && (tab2[i]>val2)){
tab2[i+1]=tab2[i];
i--;
}
tab2[i+1]=val2;

j'ai eu du mal à décortiquer le "bazar", lol, j'ai pas tout-à-fait appris la même chose.

Normalement ça fonctionne, je poste le code complet pour celui que ça intéresse ou si vous trouvez une erreur. j'espère que c'est pas interdit par le forum, si quelqu'un veut corriger, je ne demande pas mieux

import java.util.*;
public class testttest {

public static void main(String[] args) {
Scanner lectureclavier=new Scanner(System.in);
int taille, i, j, val;
System.out.println("Entrez la taille du tableau");
do{
taille=lectureclavier.nextInt();
}while(taille<1);
int tab [];
tab = new int [taille];

System.out.println("Entrez une valeur");
tab[0]=lectureclavier.nextInt();
System.out.println("Entrez une valeur");
val=lectureclavier.nextInt();
if(val >= tab[0]){
tab[1]=val;
}else
{
tab[1]=tab[0];
tab[0]=val;
}

for(i=2;i<taille;i++)
{
System.out.println("Entrez une valeur");
val=lectureclavier.nextInt();
tri_insertion(tab,i-1,taille,val);
}
for(j=0;j<taille;j++)
{
System.out.print(" "+tab[j]);
}
}

public static void tri_insertion(int tab2 [], int k,int taille2,int val2){
int i=k;

while((i>=0) && (tab2[i]>val2)){
tab2[i+1]=tab2[i];
i--;
}
tab2[i+1]=val2;
}
}
0
Froulik Messages postés 3750 Date d'inscription lundi 11 novembre 2013 Statut Membre Dernière intervention 15 avril 2014 941
14 janv. 2014 à 18:50
Merci de ton partage
ça peut être utile à un internaute. Qui sait ?
Bonne soirée :o)
0