Page 1 sur 1

un tri par tas en c

Publié : mar. 15/janv./2013 23:01
par amoula222
Bonjour,
slt tt le monde , donc je cherche un programme pr implémenter un tri par tas en préparant une interface graphique
(mode texte ) genre des case qui illute toutes les étpaes de tri d'un tableau en entrée sur le tas
SVP aidez moiiiiiiiiiiiiii
MERCIII

Re: un tri par tas en c

Publié : mer. 16/janv./2013 10:28
par Mesa
J'ai trouvé un algo sur wikipedia : http://fr.wikipedia.org/wiki/Tri_par_tas

que j'ai traduit en PB:

Code : Tout sélectionner

Procedure tamiser(Array arbre(1),noeud,n) ; 1= Tableau à 1 dimension
  ;descend arbre(noeud) à sa place, sans dépasser l'indice n
  Protected k, j, i
  k=noeud
  j=2*k
  While j<=n
    If j<n And arbre(j)<arbre(j+1)
      j=j+1
    EndIf
    If arbre(k)<arbre(j)
      Swap arbre(k) , arbre(j)
      k=j
      j=2*k
    Else
      Break
    EndIf
  Wend
EndProcedure

Procedure tri_par_tas(Array arbre(1), longueur)
  Protected i                   ; Problème avec i=0
  For i=longueur/2 To 1 Step -1
    tamiser(arbre(),i,longueur)
  Next i
  For i=longueur To 2  Step -1
    Swap arbre(i) , arbre(1)
    tamiser(arbre(),1,i-1)
  Next i
EndProcedure


;=====================
Dim arbre(10)

;Remplir tableau avec nombres aléatoires
For i=1 To 9                 
  arbre(i)=Random(100 ,0)
Next i

;Afficher tableau
For i=1 To 9
  Debug arbre(i)
Next i

Debug "========================"
;Tri par tas
tri_par_tas(arbre(), ArraySize(arbre()))

;Afficher tableau trié
For i=1 To 9
  Debug arbre(i)
Next i
Ça fonctionne à condition que la borne inférieure du tableau soit égal à 1.
Il faudrait regarder de plus près l'algo pour que ça fonctionne avec la borne inférieure égal à zéro.

Mesa.

Re: un tri par tas en c

Publié : mer. 16/janv./2013 20:38
par amoula222
g un prob avec la déclaration de Procedure tamiser(Array arbre(1),noeud,n) en langage c ??

Re: un tri par tas en c

Publié : mer. 16/janv./2013 20:55
par Backup
amoula222 a écrit :en langage c ??
t'es sur un Forum Purebasic pas C :roll:


tu trouvera surement ton beurre sur le NEt, c'est pas les Forums consacré au C qui manquent ....