/* Escriba versiones recursiva e iterativa del algoritmo filtrado ascendente aplicado en una posiciĆ³n que pertenece al rango [1..n]. */ #include //parte a) // Forma recursiva void filtradoAscendenteRec(T* arreglo, int pos){ if ((pos>1) && arreglo[pos/2] > arreglo[pos]){ // condicion para ver si hago el switcheo T aux= arreglo[pos]; arreglo[pos]=arreglo[pos/2]; arreglo[pos/2]=aux; filtradoAscendenteRec(arreglo, pos/2); } } // Forma iterativa void filtradoAscendente(T* arreglo, int pos){ while ((pos>1) && arreglo[pos/2] > arreglo[pos]){ T aux= arreglo[pos]; arreglo[pos]=arreglo[pos/2]; arreglo[pos/2]=aux; pos/=2; } } //parte b) // Forma recursiva void filtradoDescendenteRec(T* arreglo, int n, int pos){ if (2*pos<=n){ //verifico que tenga hijos para comparar int pos_hijo=2*pos; if ((pos_hijo + 1 <= n) && (arreglo[pos_hijo]>arreglo[pos_hijo+1])) { // si el hijo der existe y a su vez es mas prioritario que el izq, entonces tengo que switchear con ese pos_hijo=pos_hijo+1; } if (arreglo[pos_hijo]arreglo[pos_hijo+1])) { // si el hijo der existe y a su vez es mas prioritario que el izq, entonces tengo que switchear con ese pos_hijo=pos_hijo+1; } if (arreglo[pos_hijo]0){ heap.arreglo[1]=heap.arreglo[heap.tope]; heap.tope--; if (heap.tope>0){ filtradoDescendente(heap.arreglo, heap.tope, 1); } } } int main() { printf("Hello World"); return 0; }