Guest User

Untitled

a guest
Feb 19th, 2017
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.18 KB | None | 0 0
  1. /*
  2. Name: HeapSort.cpp
  3. Copyright: Universidad Nacional Abierta
  4. Author: Cesar A. Rodriguez C.
  5. Date: 09/10/16 21:11
  6. Description: Programa para la solución al problema correspondiente al objetivo 6 del Trabajo Practico de la Materia (324) 2016-1
  7. */
  8.  
  9. #include <stdlib.h>
  10. #include <iostream>
  11. #include <time.h>
  12.  
  13. const int MAX = 101;
  14. int k;
  15. int Heapsort[MAX];
  16.  
  17. // Arbol Parcialmente ordendo
  18. struct Cola_De_Prioridad{
  19.  
  20. int contenido[MAX];
  21. int ult;
  22. };
  23.  
  24.  
  25. Cola_De_Prioridad Crea(Cola_De_Prioridad A){
  26. // Inicializamos la estructura de datos
  27.  
  28. int k;
  29.  
  30. A.ult = 0;
  31. for(k = 0; k < MAX; k++)
  32. A.contenido[k] = 0;
  33.  
  34. return A;
  35. };
  36.  
  37.  
  38. Cola_De_Prioridad Inserta(int x, Cola_De_Prioridad A){
  39. //Inserta un elemento al arbol y lo ordena de menor a mayor
  40.  
  41. int i, temp;
  42.  
  43. if(A.ult >= MAX)
  44. printf("\nLa cola esta llena. \n");
  45. else{
  46. A.ult = A.ult + 1;
  47. A.contenido[A.ult] = x;
  48. i = A.ult;
  49.  
  50. while((i > 1) and (A.contenido[i] < A.contenido[i/2])){
  51. temp = A.contenido[i];
  52. A.contenido[i] = A.contenido[i/2];
  53. A.contenido[i/2] = temp;
  54. i = i/2;
  55. }
  56. return A;
  57. }
  58. };
  59.  
  60.  
  61. void Ver(Cola_De_Prioridad A){
  62. // Imprime el contenido del arbol
  63.  
  64. int i;
  65.  
  66. for(i = 0; i < MAX; i++)
  67. printf(" A[%d]= %d \n", i, A.contenido[i]);
  68.  
  69. printf("\n A.ult = %d ", A.ult);
  70. printf("\n\n");
  71. }
  72.  
  73.  
  74. Cola_De_Prioridad Empuja(Cola_De_Prioridad A, int primero, int ultimo){
  75. // Reestable la propiedad del arbol parcialmente ordenado hundiendo el dato infractor a donde corresponde
  76.  
  77. int r, aux;
  78.  
  79. r = primero;
  80. while(r <= (ultimo/2)){
  81. if(ultimo == 2*r){
  82. if( A.contenido[r] > A.contenido[2*r]){
  83. aux = A.contenido[r];
  84. A.contenido[r] = A.contenido[2*r];
  85. A.contenido[2*r] = aux;
  86. r = ultimo;
  87. }
  88. else
  89. r = ultimo;
  90. }
  91. else
  92. if(A.contenido[r] > A.contenido[2*r] and A.contenido[2*r] <= A.contenido[2*r+1]){
  93. aux = A.contenido[r];
  94. A.contenido[r] = A.contenido[2*r];
  95. A.contenido[2*r] = aux;
  96. r = 2*r;
  97. }
  98. else if(A.contenido[r] > A.contenido[2*r+1] and A.contenido[2*r+1] < A.contenido[2*r]){
  99. aux = A.contenido[r];
  100. A.contenido[r] = A.contenido[2*r+1];
  101. A.contenido[2*r+1] = aux;
  102. r = 2*r+1;
  103. }
  104. else
  105. r = ultimo;
  106. }
  107. return A;
  108. }
  109.  
  110.  
  111. int main()
  112. {
  113. printf("\n\n");
  114.  
  115. Cola_De_Prioridad Arbol;
  116.  
  117. // Inicializamos la estructura
  118. Arbol = Crea(Arbol);
  119.  
  120. //Asignamos valores entre 1 y 1000 a la esctructura y la mostramos.
  121. srand(clock());
  122. for(k = 0; k < MAX-1; k++)
  123. Arbol = Inserta(rand() % 1001, Arbol);
  124.  
  125. // Vemos el resultado
  126. Ver(Arbol);
  127.  
  128.  
  129.  
  130. // Heapsort
  131.  
  132. for(k = 0; k < Arbol.ult; k++){
  133. Heapsort[k]=Arbol.contenido[1]; // Alamcenamos el dato que resulta ser el de menor valor entre todos.
  134. Arbol.contenido[1] = Arbol.contenido[Arbol.ult-k]; // Reemplazamos la raiz por la hoja mas a la izquierda del ultimo nivel quebrando la propiedad de los arboles parcialmente ordenados
  135. Arbol.contenido[Arbol.ult-k] = 0;
  136. Arbol = Empuja(Arbol, 1, Arbol.ult-k-1); // Restablecemos la propiedad del arbol parcialmente ordenado.
  137. }
  138.  
  139. printf(" El orden es el siguiente: \n\n ");
  140. for(k = 0; k < Arbol.ult; k++)
  141. printf(" %d", Heapsort[k]);
  142.  
  143. printf("\n\n");
  144. printf("\n\n");
  145. system("pause");
  146. return 0;
  147. }
Add Comment
Please, Sign In to add comment