Advertisement
Guest User

Untitled

a guest
Dec 14th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.04 KB | None | 0 0
  1. /************************************************************************/
  2. /* Auteur : S. Gueye */
  3. /* TP : Arbres Binaires de Recherche */
  4. /* Date dernière maj : 25/11/2019 */
  5. /************************************************************************/
  6.  
  7. #include <iostream>
  8. #include <fstream>
  9. #include <algorithm>
  10. #include "tri.h"
  11.  
  12. using namespace std;
  13.  
  14.  
  15. /****************************************/
  16. /* Objectif : Echange
  17. /* Complexité : 0(1)
  18. /****************************************/
  19. tas::tas(int max)
  20. {
  21. this->max = max;
  22. T = new int[max];
  23. n = 0;
  24. }
  25.  
  26. /****************************************/
  27. /* Objectif : Constructeur
  28. /* Complexité : 0(n)
  29. /****************************************/
  30. tas::tas(char* filename){
  31. ifstream file(filename);
  32. int nb,tmp;
  33.  
  34. file >> nb;
  35.  
  36. T = new int[nb];
  37. n = 0;
  38. for(int i = 0; i < nb ; i++){
  39. file >> tmp;
  40. insertion(tmp);
  41. }
  42. file.close();
  43.  
  44. }
  45.  
  46.  
  47. /****************************************/
  48. /* Objectif : Echange
  49. /* Complexité : 0(1)
  50. /****************************************/
  51. void tas::echange(int &a, int &b)
  52. {
  53. int tmp = a;
  54. a = b;
  55. b = tmp;
  56. }
  57.  
  58.  
  59. /****************************************/
  60. /* Objectif : Affichage
  61. /* Complexité : 0(n)
  62. /****************************************/
  63. void tas::affiche()
  64. {
  65. cout << "T =";
  66. for(int i = 0; i < n; i++)
  67. cout << " " << T[i];
  68. cout << endl;
  69. }
  70.  
  71. /****************************************/
  72. /* Objectif : Insertion d'un entier x
  73. /* Complexité : 0(log(n))
  74. /****************************************/
  75. void tas::insertion(int x)
  76. {
  77. // !!! A FAIRE !!! //
  78. T[n] = x;
  79. int i = n;
  80. while(i>=0 && T[i]<T[((i-1)/2)]){
  81. echange(T[i],T[((i-1)/2)]);
  82. i = ((i-1)/2);
  83. }
  84. n++;
  85. }
  86.  
  87. /****************************************/
  88. /* Objectif : Reorganiser en un tas à partir de l'élément T[j]
  89. /* Complexité : 0(log(n))
  90. /****************************************/
  91. void tas::reorganiser(int j)
  92. {
  93. // !!! A FAIRE !!! //
  94. if(n>0){
  95. int i = j;
  96. int m;
  97. while(i<=((n/2)-1)){
  98. if(T[2*i+1] < T[2*i+2]){
  99. m = 2*i+1;
  100. }
  101. else{
  102. m = 2*i+2;
  103. }
  104. if(T[i]>T[m]){
  105. echange(T[i],T[m]);
  106. i = m;
  107. }
  108. else{
  109. i = n;
  110. }
  111. }
  112. }
  113. }
  114.  
  115. /****************************************/
  116. /* Objectif : renvoie de l'élément de la valeur minimale et réorganisation du tableau
  117. /* Complexité : 0(log(n))
  118. /****************************************/
  119. int tas::suppression()
  120. {
  121. // !!! A FAIRE !!! //
  122. int min = T[0];
  123. T[0] = T[n-1];
  124. n--;
  125. reorganiser(0);
  126. return min;
  127. }
  128.  
  129. /****************************************/
  130. /* Objectif : Tri du tableau T
  131. /* Complexité : 0(nlog(n))
  132. /****************************************/
  133. void tas::tri()
  134. {
  135. // !!! A FAIRE !!! //
  136. /* for(int k=0; k=(n-1)/2; k--){
  137. reorganiser(k);
  138. }*/
  139. int k = n;
  140. int min;
  141. while(n>0){
  142. min = suppression();
  143. T[n] = min;
  144. }
  145. n=k;
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement