Guest User

Untitled

a guest
Jun 23rd, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.85 KB | None | 0 0
  1. /*****************************************************/
  2. /* Nom: Ansen Pierre */
  3. /* Groupe: 2125 */
  4. /* ex : Heap Sort - Tri arbre */
  5. /* */
  6. /* Date: 31/01/2010 */
  7. /*****************************************************/
  8.  
  9. # include <stdio.h>
  10. # include <stdlib.h>
  11. # define MAX 100
  12.  
  13. void heapsort (float *, int);
  14. void paterner (float *, int, int);
  15. void affiche (float *, int);
  16. void encode (float *, int);
  17.  
  18. void main ()
  19. {
  20. float vec[MAX];
  21. int nbel, test;
  22.  
  23. do
  24. {
  25. printf("Entrez le nombre d'elements: ");
  26. fflush(stdin);
  27. test=scanf("%d",&nbel);
  28. } while (test==0 || nbel > MAX || nbel <1);
  29.  
  30. /* fonction qui permet d'encoder le vecteur */
  31. encode (&vec[0],nbel);
  32.  
  33. system ("cls");
  34.  
  35. /* fonction qui permet d'afficher le vecteur */
  36. printf("Voici votre vecteur:\n");
  37. affiche (&vec[0],nbel);
  38.  
  39. /* fonction qui construit le heap sort et tri */
  40. heapsort (&vec[0],nbel);
  41.  
  42. /* fonction qui permet d'afficher le vecteur */
  43. printf("\n\nVoici votre vecteur apres le heap sort et le tri:\n");
  44. affiche (&vec[0],nbel);
  45.  
  46. printf("\n\n");
  47.  
  48. }
  49.  
  50. /**************************************************************/
  51. /* I: pvec: adresse du vecteur */
  52. /* nbl: nombre d'éléments dans le vecteur */
  53. /* P: donne des valeurs à chaque élément du vecteur */
  54. /* O: /// */
  55. /**************************************************************/
  56.  
  57. void encode (float *pvec, int nbl)
  58. {
  59. int test,i=0;
  60.  
  61. while (i<nbl)
  62. {
  63. do
  64. {
  65. printf("Entrez la valeur pour la case %d: ",i);
  66. fflush(stdin);
  67. test=scanf("%f",pvec);
  68. }while (test==0);
  69. i++;
  70. pvec++;
  71. }
  72. }
  73.  
  74. /**************************************************************/
  75. /* I: pvec: adresse du vecteur */
  76. /* nbl: nombre d'éléments dans le vecteur */
  77. /* P: Affiche le vecteur */
  78. /* O: /// */
  79. /**************************************************************/
  80.  
  81. void affiche (float *pvec, int nbl)
  82. {
  83. int i=0;
  84.  
  85. while (i<nbl)
  86. {
  87. printf("%.0f ",*pvec);
  88. i++;
  89. pvec++;
  90. }
  91. }
  92.  
  93. /***************************************************************/
  94. /* I: pvec: adresse du vecteur */
  95. /* ipere: variable utilisé pour distinguer le père des fils */
  96. /* nbl: nombre d'éléments dans le vecteur */
  97. /* P: Paterner le vecteur, chaque père est plus grand que ses */
  98. /* deux fils */
  99. /* O: /// */
  100. /***************************************************************/
  101.  
  102. void paterner (float *pvec, int ipere,int nbl)
  103. {
  104. int ifils;
  105. float temp;
  106.  
  107. temp=*(pvec+ipere-1);
  108. ifils=ipere*2;
  109.  
  110. while (ifils<=nbl)
  111. {
  112. if (ifils<nbl && *(pvec+ifils)>*(pvec+ifils-1))
  113. {
  114. ifils=ifils+1;
  115. }
  116.  
  117. if (*(pvec+ifils-1)>temp)
  118. {
  119. *(pvec+ipere-1)=*(pvec+ifils-1);
  120. ipere=ifils;
  121. ifils=ipere*2;
  122. }
  123. else
  124. {
  125. ifils=nbl+1;
  126. }
  127. }
  128. *(pvec+ipere-1)=temp;
  129. }
  130.  
  131. /**************************************************************/
  132. /* I: pvec: adresse du vecteur */
  133. /* nbl: nombre d'éléments dans le vecteur */
  134. /* P: Appelle à la fonction pour paterner successivement */
  135. /* de sorte à avoir un père plus grand que ses deux fils */
  136. /* O: /// */
  137. /**************************************************************/
  138.  
  139. void heapsort (float *pvec, int nbl)
  140. {
  141. int i;
  142. float temp;
  143.  
  144. i=nbl/2;
  145. while (i>=1)
  146. {
  147. paterner (pvec,i,nbl);
  148. i--;
  149. }
  150.  
  151. i=nbl;
  152. while (i>1)
  153. {
  154. temp=*(pvec);
  155. *(pvec)=*(pvec+i-1);
  156. *(pvec+i-1)=temp;
  157. i--;
  158. paterner (pvec,1,i);
  159. }
  160. }
Add Comment
Please, Sign In to add comment