You are on page 1of 8

METODOS DE ORDENAMIENTO heap sort, Quicksort y Rapido recusivo.

RESENDIZ RESENDIZ SUSANA Nota: La idea era hacer un men con los 3 mtodos donde me ordenara una lista de nmeros pero por carga acadmica y proyectos finales no lo hice de esa forma, los puse por separado espero no haya ningn inconveniente. METODO DE HEAP SORT /*Programa Heap sort*/ #include <conio.h> #include <iostream.h> #include <stdio.h> void insertamonticulo(int *, int N); void eliminamonticulo(int *, int N); void main() { clrscr(); int *array; int N; cout<<"INSTITUTO TECNOLOGICO DE QUERETARO\n"; cout<<"ESTRUCTURA DE DATOS\n"; cout<<"PROGRAMA QUE UTILIZA EL METODO DE ORDENAMIENTO Heap Sort\n"; cout<<"Introduce el numero de datos enteros a ordenar: "; cin>>N; array=new int[N+1]; int i; array[0]=-1; for(i=1;i<=N;i++) { cout<<"Introduce el valor "<<i<<": "; cin>>array[i]; } printf("\n Antes de la funcion:\n"); for(i=1;i<=N;i++) { cout<<array[i]<<"\n"; } getch();

insertamonticulo(array, N); printf("\nDespues de la funcion que inserta en el monticulo:\n"); for(i=1;i<=N;i++) { cout<<array[i]<<"\n"; } getch(); eliminamonticulo(array, N); printf("\nDespues de la funcin que elimina el Heap Sort:\n"); for(i=1;i<=N;i++) { cout<<array[i]<<"\n"; } getch(); } void insertamonticulo(int *A, int N) { int i, k, aux, band; for (i=2; i<=N; i++) { k=i; band=1; while (k>1 && band==1) { band=0; if (A[k]>A[k/2]) { aux=A[k/2]; A[k/2]=A[k]; A[k]=aux; k=k/2; band=1; } } } } void eliminamonticulo(int *A, int N) { int i, aux, izq, der, k, ap, bool, mayor;

for (i=N; i>1; i--) { aux=A[i]; A[i]=A[1]; izq=2; der=3; k=1; bool=1; while (izq<i && bool==1) { mayor=A[izq]; ap=izq; if (mayor<A[der] && der!=i) { mayor=A[der]; ap=der; } if (aux<mayor) { A[k]=A[ap]; k=ap; } else bool=0; izq=k*2; der=izq+1; } A[k]=aux; } }

METODO QUICKSORT RECURSIVO #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <iostream.h> #define TAM 20 int generar_elementos (int arreglo[]); void mostrar (int arreglo[]); void quicksort (int arreglo[], int inf, int sup); int main() { int arreglo[TAM]; generar_elementos(arreglo);

printf("\nITQ.... ESTRUCTURAS DE DATOS\n\n"); printf("\nNUMEROS AL AZAR PARA ORDENAMIENTO QUICKSORT\n\n"); printf("Arreglo original:"); mostrar(arreglo); quicksort(arreglo, 0, TAM - 1); printf("Arreglo ordenado por quicksort"); mostrar(arreglo); getch(); } int generar_elementos (int arreglo[]) { int i; srand ((unsigned) time(NULL)); for (i=0; i<TAM; i++) arreglo[i] = rand()%TAM; return TAM; }

void mostrar (int arreglo[]) { int i; for (i=0; i<TAM; i++) printf ("\n\tElemento[%2d] = %d", i, arreglo[i]); printf ("\n\n"); } void quicksort (int arreglo[], int inf, int sup) { int elem_div = arreglo[sup]; int temp ; int i = inf - 1, j = sup; int cont = 1; if (inf >= sup) /* Se cruzaron los indices ? */ return; while (cont) { while (arreglo[++i] < elem_div); while (arreglo[--j] > elem_div); if (i < j) { temp = arreglo[i]; arreglo[i] = arreglo[j]; arreglo[j] = temp; } else cont = 0; } temp = arreglo[i]; arreglo[i] = arreglo[sup]; arreglo[sup] = temp; quicksort (arreglo, inf, i - 1); quicksort (arreglo, i + 1, sup); }

METODO DE QUICKSORT

/*INSTITUTO TECNOLOGICO DE QUERETARO ESTRUCTURA DE DATOS RESENDIZ RESENDIZ SUSANA*/ #include <stdio.h> #include <stdlib.h> #include <conio.h> void quicksort(int x[], int first, int last); int partition(int y[], int f, int l); int main(void) { int array[] = {9, 7, 5, 3, 1}; int const num_elem = sizeof array / sizeof array[0]; int i; printf("Sin ordenar:"); for (i = 0; i < num_elem; i++) printf("%3d", array[i]); puts("");

quicksort(array, 0, num_elem - 1); printf("Ordenados: "); for (i = 0; i < num_elem; i++) printf("%3d", array[i]); puts(""); return EXIT_SUCCESS; } void quicksort(int x[], int first, int last) { int pivIndex = 0; if(first < last) { pivIndex = partition(x,first, last); quicksort(x,first,(pivIndex-1)); quicksort(x,(pivIndex+1),last); } } int partition(int y[], int f, int l) { int up,down,temp; int piv = y[f]; up = f; down = l; do { while (y[up] <= piv && up < l) { up++; } while (y[down] > piv ) { down--; } if (up < down ) { temp = y[up]; y[up] = y[down]; y[down] = temp; } } while (down > up); y[f] = y[down]; y[down] = piv; return down;

You might also like