Tri par insertion d'une liste

Fermé
braham2 Messages postés 87 Date d'inscription dimanche 28 juin 2009 Statut Membre Dernière intervention 17 octobre 2013 - 12 janv. 2010 à 09:22
braham2 Messages postés 87 Date d'inscription dimanche 28 juin 2009 Statut Membre Dernière intervention 17 octobre 2013 - 5 févr. 2010 à 09:41
Bonjour, comment allez vous mes amis alors j'ai probleme j'arrive pas a trouvé une solution bien définie et voici l'énoncé de mon probleme:
1.
le tri pr insertion dans une liste linéaire chainé de n elements peut etre formulé comme suit :
pour p allant de 1 a n-1
considérer la sous liste triée formé des p premier elements
supprimé le p-1 iéme élément
l'insérer dans cette sous liste a a bonne place sn créer un nouveau maillon
donner le programme en pascale .
2.
dans 1 la recherche de la position dans laquelle l'élément est insérer se fait ordinairement à partir du premier élément. on désire maintenant que cette recherch se fasse par rapport au dernier élément insérer. c'st a dire i l'élément à inserer est superieur ou égal au dernier élément insérer la recherche de sa position se fait a partir de cet élément autrement à partir du début.
refaire l'algorithme précédent en rajoutant t en mettant en relief les opérations rajouté pour le but désiré.
3.
afin d'amelioré la variante 1. l'insertion d'un élément dans une sous liste se fera par rapport à un élément déja insérer qui soit le plus proche de la position du milieu.donc quand un nouvel élément est insérer dans une sous liste on choisira entre cet élément et le dernier insérer celui qui est le plus proche du mileu .
reprendre l'algorithme précédent en rjoutant et en mettant en relif les opérations rajoutées pour l'objectif désiré.
aidez moi s'il vous plait urgent please.
A voir également:

2 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
12 janv. 2010 à 09:25
1
braham2 Messages postés 87 Date d'inscription dimanche 28 juin 2009 Statut Membre Dernière intervention 17 octobre 2013 7
5 févr. 2010 à 09:14
bjr si vous savez quelqu'un métrise bien cette trucs parceque j'arrive pas a trouver une solution satisfaite merci de m'aider c'est urgent et merci bien et beaucoup
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > braham2 Messages postés 87 Date d'inscription dimanche 28 juin 2009 Statut Membre Dernière intervention 17 octobre 2013
5 févr. 2010 à 09:19
j'arrive pas a trouver une solution satisfaite
Ben montres-nous déjà ce que tu as fait...
0
braham2 Messages postés 87 Date d'inscription dimanche 28 juin 2009 Statut Membre Dernière intervention 17 octobre 2013 7
5 févr. 2010 à 09:41
salut et bjr j'ai fais deux algorithme un est marche très bien mais avec d'autre methode et le deuxiéme non
voila le premier programme qui n'est pas marché :
program ansire;
type pnt=^element;
element=record
val:integer;
suiv:pnt;
end;
var
n,v:integer;
l,r,k:pnt;
procedure creation(var l:pnt ;var c:integer);
var
p:pnt;
bool:boolean;
v:integer;
begin
l:=nil;
c:=0;
bool:=true;
writeln;
writeln(' entre la list lorsque vous avez termine tape sur 0');
while bool=true do
begin
c:=c+1;
write(' ');
readln(v);
if v=0 then begin
bool:=false
end
else begin
new(p);
p^.val:=v;
p^.suiv:=l;
l:=p;
end;
end;
end;
procedure affiche(l:pnt);
var
p:pnt;
begin
writeln(' la liste est le suivant');
p:=l;
while p<>nil do
begin

writeln(' ',p^.val);
p:=p^.suiv;
end;
end;
begin
creation(l,n);
writeln('donne la val de pnt qui v.ins ');
readln(v);
new(k);
k^.val:=v;
r:=l;
if( r^.suiv=l) then
begin
r^.suiv:=k;
end
else begin
l:=k;
end;
k^.suiv:=r^.suiv;

affiche(l);
readln;
end.

et voila le deuxiéme qu'il fonctionne :
Program Inserer_Un_Element_Liste_Contigue;

Const N=10;

Type Element = Integer;

Tableau = Array[1 ..N] of Element;

Var Liste : Tableau;

Elt : Element;

{Procédure de création de la liste}

Procedure Creation (Var L: Tableau);

Var J : Integer;

Begin

For J:=1 to N-1 do

Begin

Writeln;

Write(' Elément n? ', J,' : ');

readln(L[J]);

While L[J] = 0 do

Begin

Write(' L"élément doit être supérieur à zéro (0) : ');

Readln(L[J]);

End;

End;

End;

{Procédure qui trie la liste}

Procedure Tri(var L3:Tableau);

Var A,B:Integer;

Trouve: Boolean;

Begin

A:=1;

While A <= N-1 do

Begin

B := A + 1;

While B <= N-1 do

Begin

If L3[A] > L3[B] then

Begin

Elt := L3[A];

L3[A] := L3[B];

L3[B] := Elt;

B := B + 1;

End

Else

Begin

B := B + 1;

End;

End;

A := A + 1;

End;

End;

{Procédure qui affiche la liste après le tri}

Procedure Affiche (L2: Tableau);

Var I, K: Integer;

Begin

Write(' ');

For I:=1 to N do

Begin

Write(L2[I],' | ');

End;

End;

{Procédure qui insère un élément en respectant l’ordre de la liste}

Procedure Insertion (var L1: Tableau);

Var I : Integer;

Tete, Elem : Element;

Trouve : Boolean;

{Procédure qui crée un espace vide pour l’insertion d’un élément}

Procedure Espacement(I: integer);

Var H: Integer;

Begin

For H:= N Downto I+1 do

Begin

L1[H] := L1[H-1];

End;

End;

Begin

Writeln; Writeln; Writeln;

Write(' Donner l"élément à insérer dans la liste: ');

Readln(Elem);

I:=1;

While (I <= N) and (Trouve = False) do

Begin

If (Elem > L1[I]) and (L1[I] <> 0)then

Begin

Trouve:=False;

I := I + 1;

End

Else

Begin

Trouve:= true;

If I = 1 then

Begin

Espacement(I);

L1[I]:=Elem;

End

Else

If I = N then

Begin

L1[I]:= Elem;

End

Else

Begin

Espacement(I);

L1[I]:=Elem;

End;

End;

End;

End;

BEGIN { PROGRAMME PRINCIPAL }

Creation (Liste);

Writeln; Writeln; Writeln;

Writeln(' LES ELEMENTS DE LA LISTE AVANT L"INSERTION');

Writeln;

Tri(Liste);

Affiche(Liste);

Insertion(Liste);

Writeln;

Writeln(' LES ELEMENTS DE LA LISTE APRES L"INSERTION ');

Writeln;

Affiche (Liste);

Readln;

END.
0