Rechercher : dans
Par :

Algorithme tri fusion

Dernière réponse le 3 jan 2009 à 01:06:49 batmat, le 24 sep 2002 à 09:47:46 
 Signaler ce message aux modérateurs

Je cherche à le retrouver, mais je bloque à plusieurs endroits.
EN gros moi je vois un truc de ce genre:

void trifusion(int *tab, int a, int b)
{
int mid=(a+b)/2;
if(a!=b)
{
trifusion(tab,a,mid);
trifusion(tab,mid+1,b);
}
//on fusionne les deux parties triées
fusion(tab, a, mid, b)
}

Avec la fonction fusion à faire.

Est ce que qqn aurait l'algo complet en C, écrit proprement svp

Merci d'avance @ tous

@+
batmat
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?

Meilleures réponses pour « algorithme tri fusion » dans :
Tri par fusion - récursivité- VoirVoici une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri par fusion : Procedure Tri_Fusion (Var t : TAB; g, d : integer); Var m, i, j, k : integer; s : TAB; Begin If d > g Then ...
Tri à bulles -récursivité- VoirVoici une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri à bulles : Procedure Tri_bulles (var t : TAB; n : integer); Var i, aux : integer; Function Trier (t : TAB; n : integer) : Boolean; ...
Pascal - Tri par insertion - Récursivité- VoirVoici une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri par insertion : Procedure Tri_Ins (Var t: TAB; n: integer); Var aux,i : integer; begin If n > 1 Then begin ...
SQL - Tri VoirTri des résultats Il est possible en SQL d'organiser les résultats grâce à la clause ORDER BY. La clause ORDER BY est suivie des mots clés ASC ou DESC, qui précisent respectivement si le tri se fait de manière croissante (par défaut) ou...
Introduction à l'algorithmique VoirNotion d'algorithme La mise au point d'un programme informatique se fait en plusieurs étapes. Il s'agit de fournir la solution à un problème, la première étape consiste donc à analyser le problème, c'est-à-dire en cerner les limites et le mettre...

1

teebo, le 24 sep 2002 à 11:58:28

Y m a pas l air bon ton algo, autant que je me souvienne c est un truc du genre:

Si le tableau a plus de 1 element alors diviser au milieu et trier les 2 parties puis les fusionner

Pour la fusion, ben tu prend le plus petit element entre le 2 premiers elements tu linseres dans ton resultat et tu le vires et tu recommences

Desole, mais pas le temps ni le courage decrire en details, surtout que moi et le C...

ö,ö
\_/

Répondre à teebo

2

Marden, le 24 sep 2002 à 23:31:10

Je me souviens avoir mis quelque chose sur CCM, il y a longtemps :

http://www.commentcamarche.com/forum/affich.php3?cat=0&ID=4573&page=1

Je n'ai pas testé, je n'ai pas d'environnement pour le faire, et plus du tout envie de m'y replonger. Sans garantie de transcription correcte (d'après listing). Il faut l'essayer.
Le message comprend un programme principal et 3 méthodes de tri (bulle, quick, fusion). Le "mien" est un tri (en log 2 (n) passes) par fusions de monotonies de longueur 1, 2, 4, ... , la longueur doublant à chaque passe.
La méthode que tu décris se rencontre sur le Net, mais je ne l'ai pas trouvée sous forme de la fonction en C que tu souhaiterais.

Répondre à Marden

3

courbet-123, le 3 fév 2006 à 19:04:25
  • +1

Bonjour je cherche un algorithme qui donne un tri croissant à 100 nombres entiers merci!!!

Répondre à courbet-123

4

mamou, le 8 mar 2007 à 01:10:14

Tu pe trouver sur internet et tu vas absolument trouver le code en c ou en c++ ou en java,et tu je pense parail a par le code , sauf la declaration de tableau en c a besoin de reserver la memoir avant ,bon courage

Répondre à mamou

5

mbhk, le 28 nov 2008 à 22:00:58
  • +3

Program fusion01;
uses wincrt;

type
tab=array [1..20]of integer;

var
t:tab;
m,f,d,n:integer;
{---------------------------------------------------}
procedure saisie(var n:integer);

begin
repeat
write('taper la taille du tabeau n : ');
readln (n);
until n in [1..20];
end;

{---------------------------------------------------}
procedure lecture ( var t:tab ;n:integer);
var
i:integer;
begin
for i:=1 to n do
begin
write(' T[',i,']= ');
readln(t[i]);
end;
end;

{---------------------------------------------------}

procedure affiche(var t:tab;d,f:integer);
var
i:integer;
begin
for i:=d to f do
write (t[i],' ');

writeln;
writeln('------------------------------------');
end;

{---------------------------------------------------}
procedure fusion (var t:tab; d,m,f:integer);
var
tr:tab;
i,c1,c2,c3:integer;

begin
tr:=t;
if d<f then
begin c1:=d; c2:=m+1; c3:=d-1;
repeat c3:=c3+1;

if t[c1] <= t[c2] then
begin
tr[c3]:=t[c1]; c1:=c1+1;
end
else
begin
tr[c3]:=t[c2]; c2:=c2+1;
end;

until (c1>m) or (c2>f);

if c1>m then
for i:=c2 to f do
begin c3:=c3+1;
tr[c3]:=t[i];

end
else
if c2>f then
for i:= c1 to m do
begin c3:=c3+1;
tr[c3]:=t[i];

end;
t:=tr;

end;
end;

{---------------------------------------------------}
procedure tri_fusion( var t:tab;d,f:integer);
var
m:integer;
begin
if d<f then
begin
tri_fusion(t,d,m);
tri_fusion(t,m+1,f);

fusion(t,d,m,f);
end;

end;

{---------------------------------------------------}

begin

saisie(n);
lecture(t,n);
affiche(t,1,n);

tri_fusion(t,1,n);
affiche(t,1,n);

end.

Répondre à mbhk

6

roidemagique, le 2 jan 2009 à 14:18:17
  • +2

Slt ca va?
svp ki peux m aider pour trouver une solution de tri alphabétique
exercice:
le programme consiste a saisir des mots ( au maximum 10) de 20 caracteres maximum et de les inserer dans un tableau dans l ordre alphabetique . puis d afficher ensuite ce tableau .
le tableau resultat est du type TABLEAU CAR (10,20)
et merci bcp

Répondre à roidemagique

7

 MBHK, le 3 jan 2009 à 01:06:49

Slt ca va?
svp ki peux m aider pour trouver une solution de tri alphabétique
exercice:
le programme consiste a saisir des mots ( au maximum 10) de 20 caracteres maximum et de les inserer dans un tableau dans l ordre alphabetique . puis d afficher ensuite ce tableau .
le tableau resultat est du type TABLEAU CAR (10,20)
et merci bcp

repense ;
c'est tres simple que ce soit un tablleau d'entiers ou un tableau de chaines de caractères ça ne change rien en l'algorithme lui meme à part la declaration du tableau
en fait le compilateur admet la comparaison entre les chaines exemple:
'salut' > 'bonjour' :
il faut faire attention au majuscules :
'Bonbon' < 'bonbon'

Répondre à MBHK