ordenamiento+y+busqueda.pdf

14
Algoritmos de Ordenacion y busqueda fisi unmsm Métodos de ordenamiento Clase COrdemamiento viene-de CObjeto Atributos Var Entero: n //dimensión del vector v Dimensión [n] ejemplar-de CEntero Metodos Constructor(dim) MergeSort mergeSort( a, inicio, fin ) mescla( a, inicio, medio, fin ) copiarArreglo( v, v1, i, dim ) quickSort Lectura Salida busquedaBinaria( val ) busBinRec( a, i, f, val ) busBinRec( val ) intercambiar( a, b ) quickSort quickSort( inicio, fin ) heapSort fClase Método COrdemamiento.Constructor( dim ) nßdim vßnuevo ejemplar-de CArreglo Dimesión [n] fMétodo Método COrdemamiento.Salida Escribir Los elem’s del arreglo son” Para k desde 1 hasta n hacer Escribir v[k] fPara fMétodo Método COrdemamiento.Lectura Escribir ingrese los elem del arreglo” Para k desde 1 hasta n hacer Leer dato V[k] ß dato fPara fMétodo Método COrdemamiento.MergeSort mergeSort( v, 1, n ) fMétodo Reyes Marzano, Alejandro [email protected]

Upload: edi-carhuatanta-becerra

Post on 25-Jan-2016

10 views

Category:

Documents


4 download

DESCRIPTION

Ordenamiento+y+Busqueda

TRANSCRIPT

Page 1: Ordenamiento+y+Busqueda.pdf

Algoritmos de Ordenacion y busqueda fisi unmsm

Métodos de ordenamiento Clase COrdemamiento viene-de CObjetoAtributos Var

Entero: n //dimensión del vectorv Dimensión [n] ejemplar-de CEntero

MetodosConstructor(dim)MergeSortmergeSort( a, inicio, fin )mescla( a, inicio, medio, fin )copiarArreglo( v, v1, i, dim )quickSortLecturaSalidabusquedaBinaria( val )busBinRec( a, i, f, val )busBinRec( val )intercambiar( a, b )quickSortquickSort( inicio, fin )heapSort

fClase Método COrdemamiento.Constructor( dim ) nßdimvßnuevo ejemplar-de CArreglo Dimesión[n]fMétodo Método COrdemamiento.SalidaEscribir “Los elem’s del arreglo son”Para k desde 1 hasta n hacer

Escribir v[k]fParafMétodo Método COrdemamiento.LecturaEscribir “ingrese los elem del arreglo”Para k desde 1 hasta n hacer

Leer datoV[k] ß dato

fParafMétodo Método COrdemamiento.MergeSortmergeSort( v, 1, n )fMétodo

Reyes Marzano, Alejandro [email protected]

Page 2: Ordenamiento+y+Busqueda.pdf

Algoritmos de Ordenacion y busqueda fisi unmsm

Método COrdemamiento.mergeSort(a, inicio, fin ) Entero: c Si(inicio<fin)Entonces c ß (inicio+fin)div2 mergeSort(a,inicio,c) mergeSort(a,c+1,fin) mescla(a,inicio,c,fin) fSi fMetodo Método COrdemamiento.Longitd(a)à Entero: i ß0 Mientras (a[i]≠nulo) Hacer i ßi+1 fMientras Retornar ifMetodo Método COrdemamiento.mescla(a, inicio, medio, fin)aux Dimesión[Longitd(a)] ejemplar de CArregloEntero: x,y,z

x ß inicioz ß inicio

y ß medio+1 Mientras( x<=medio ) y (y<=fin) Hacer Si (a[x]<=a[y]) Entonces aux[z]=a[x] xßx+1 zßz+1 Sino aux[z]=a[y] zßz+1 yßy+1 fSi Mientras (x<=medio) aux[z]=a[x] xßx+1 zßz+1 fMientras Mientras (y<=fin) aux[z]=a[y] zßz+1 yßy+1 fMientras fMientras

Reyes Marzano, Alejandro [email protected]

Page 3: Ordenamiento+y+Busqueda.pdf

Algoritmos de Ordenacion y busqueda fisi unmsm

copiarArreglo (a, aux, inicio, fin-inicio+1) fMetodo Método COrdemamiento.copiarArreglo (v,v1,i,dim) Entero kPara k desde i hasta dim hacer

v[k] ß v1[k]fParafMetodo Método COrdemamiento.busquedaBinaria(val)à Entero: i,f,ciß1 fßn cß(i+f)/2 Mientras(i<f) y (v[c]≠val)Hacer

Si(val<v[c])Entoncesf ß c-1

Sino I ß c+1 fSi c ß (i+f) div 2 fMinetras Si(val=v[c])Entonces Retornar(”el elem se encuentra en la pos”,c) else Retornar(”el elem no se encuentra en el vector) fSifMetodo Método COrdemamiento.busBinRec(val)àRetornar busBinRec(v,1,n,val)fMetodo Método COrdemamiento.busBinRec(a, i, f, val)à Entero: c ß -1 Si(f<i)Entonces

Retornar c Sino C ß (i+f) div 2 Si(val<a[c])Entonces Retornar busBinRec(a,c+1,f,val) Sino Si(a[c]<val)Entonces Retornar busBinRec(a,c+1,f,val) Sino

Reyes Marzano, Alejandro [email protected]

Page 4: Ordenamiento+y+Busqueda.pdf

Algoritmos de Ordenacion y busqueda fisi unmsm

Retornar c fSi fSifMetodo Método COrdemamiento.ordenamientoInsercionDirectaEntero: i,j,c Para i desde 1 Hasta n Hacer cßv[i] jßi-1 Mientras((j>=0) y v[j] >c))Hacer v[j+1] ß v[j] jßj-1 fMientras v[j+1]ßc fPara fMetodo Método COrdemamiento.quickSort quickSort(1,n)fMetodo Método COrdemamiento.quickSort( inicio, fin )Entero: i,f,pivoteißinicio fßfin pivoteßv[(inicio+fin)div2] Hacer Mientras((v[i]<pivote) y (f<=fin))Hacer i ß i+1 fMientras Mientras(pivote<v[f])Hacer f ß f-1 fMientras Si(i<=f)Entonces intercambiar(v[i],v[f]) i ß i+1 f ßf-1 fSi Mientras(i<=f) Si(inicio<f)Entonces quickSort(inicio,f) fSi Si(i<fin) Entonces quickSort(i,fin) fSi

Reyes Marzano, Alejandro [email protected]

Page 5: Ordenamiento+y+Busqueda.pdf

Algoritmos de Ordenacion y busqueda fisi unmsm

fMetodo Método COrdemamiento.intercambiar(a, b) auxßa aßb bßauxfMetodo Método COrdemamiento.heapSortEntero: j, i, k, item Para k desde n hasta 1 Hacer Para i desde 1 hasta k Hacer item ß v[i] j ß i div 2 Mientras (j>1 && v[j]<item) Hacer v[i] ß v[j] I ß j J ß j div 2 fMientras v[i] ß item fPara intercambiar(v[1],v[k]) fParafMetodo Método COrdemamiento.ordenBurbuja Entero: i,j Logico: sw ß falso Mientras ((no sw) y (i<n)) Hacer Sw ß verdad Para j desde 1 hasta n Hacer Si(v[j]>v[j+1]) Entonces intercambiar(v[j],v[j+1]) sw ß falso fSi fPara i ß i+1 fMientrasfMetodo Método COrdemamiento.ordenacionPorInsercion Entero: aux, i, k Logico: sw ß falso Para i desde 1 hasta n Hacer Aux ß v[i] k ß i-1

Reyes Marzano, Alejandro [email protected]

Page 6: Ordenamiento+y+Busqueda.pdf

Algoritmos de Ordenacion y busqueda fisi unmsm

sw ß false Mientras (( no sw) y (k>=0)) Hacer Si(aux<v[k]) Entonces v[k+1] ß v[k] k ß k-1 Sino sw ß verdad fSi fMientras v[k+1] ß aux fParafMetodo Método COrdemamiento.insercionDirecta Entero: i, j, k Para i desde 2 hasta n Hacer k ß v[i] j ß i - 1 Mientras (j >= 0 ) y ( v[j] > k) Hacer v[j + 1] ß v[j] j ß j-1 fMientas v[j + 1] ß k fParafMetodo Método COrdemamiento.ordenPorInsercionBinaria Entero: aux, p, u, c, i, k Para i desde 2 hasta n Hacer aux ß v[i] p ß 1 u ß i-1 Mientras ( p <= u ) Hacer c ß (p+u) div 2 Si ( aux<v[c] ) Entonces u ß c-1 Sino p ß c+1 fSi fMientras Para k desde i-1 Hasta p Hacer v[k+1] ß v[k] fPara

v[p] ß aux

Reyes Marzano, Alejandro [email protected]

Page 7: Ordenamiento+y+Busqueda.pdf

Algoritmos de Ordenacion y busqueda fisi unmsm

fParafMetodo Método COrdemamiento.ordenacionPorSeleccion Entero aux, k, j, i ß 1 Mientras ( i < n ) Hacer aux ß v[i] k ß i j ß i Mientras ( j < n ) Hacer j ß j+1 Si ( v[j] < aux ) Entonces aux ß v[j] k ß j fSi fMientras v[k] ß v[i] v[i] ß aux i ß i+1 fMientrasfMetodo Método COrdemamiento.ordenacionShell Entero: k, i, j, salto salto ß n div 2 Mientras (salto>0) Hacer Para i desde (salto+1) hasta n Hacer j ß i-salto Mientras ( j > 0 ) Hacer k ß j+salto Si ( v[j] <= v[k] ) Entonces j ß 0 Sino intercambiar(v[j],v[k]) fSi j ß j-salto fMientras fPara salto ß (salto+1) div 2 fMientrasfMetodo Árbol

Reyes Marzano, Alejandro [email protected]

Page 8: Ordenamiento+y+Busqueda.pdf

Algoritmos de Ordenacion y busqueda fisi unmsm

Clase CNodo viene-de CObjetoAtributos

CNodo: hD,hIEntero: valor

Metodos Constructor() colocarHD(CNodo hd) colocarHI(CNodo hi) obtenerHD à obtenerDI à fClase Clase CArbol viene-de CObjetoAtributos Var

Nodo raizMetodos

Constructor() insertar(valor) rInOrden(Nodo p) obtenerRaiz à eliminar(valor, ptr, pad) buscar(valor)fClase Método CArbol.rInOrden(ptr)Si(p!=null)Entonces rInOrden(ptr.obtenerHI)

mostrar(p.getValor()) rInOrden(ptr.obtenerHD) fSifMetodo Método CArbol.obtenerRaiz à retornar raizfetodo Método CArbol.eliminar(valor, ptr, pad)//ptr,pad son de tipo CNodoCNodo hijo Si(ptr ≠ nulo)Entonces Si(valor < ptr.obtenerValor)Entonces Pad ß ptr eliminar(valor, ptr.obtenerHI, pad)

sino

Reyes Marzano, Alejandro [email protected]

Page 9: Ordenamiento+y+Busqueda.pdf

Algoritmos de Ordenacion y busqueda fisi unmsm

Si(valor > ptr.obtenerValor) Entonces Pad ß ptr eliminar(valor, ptr.obtenerHD, pad) sino si(ptr.obtenerHI=null)Entonces si(pad.obtenerHD=ptr)Entonces pad.colocarHI(ptr.obtenerHD) sino pad.colocarHD(ptr.colocarHD) fSi sino si(ptr.obtenerHD=null)Entonces si(pad.obtenerHI=ptr)Entonces pad.colocarHI(ptr.obtenerHI) sino pad.colocarHD(ptr.obtenerHI) fSi sino //existe dos hijos pad ß ptr hijo ß pad.obtenerHD si(hijo.obtenerHI≠null)Entonces Mientras(hijo.obtenerHI≠null)Hacer Pad ß hijo Hijo ß hijo.obtenerHI fMientras ptr.colocarValor(hijo.obtenerValor) pad.colocarHI(hijo.obtenerHD) sino ptr.setValor(hijo.obtenerValor) pad.colcarHD(hijo.obtenerHD) fSi fSi fSi fSi fSi fSifMetodo Método CArbol.insertar(valor) CNodo: n, aux, posP ß null // prepara nuevo nodoSi (buscar(valor) ≠ null) Entonces Escribir(”ya existe")sino n ejemplar de CNodo n.colocarValor(valor)

Reyes Marzano, Alejandro [email protected]

Page 10: Ordenamiento+y+Busqueda.pdf

Algoritmos de Ordenacion y busqueda fisi unmsm

n.colocarHI(null) n.colocarHD(null) // es el primero Si(raiz = null) Entonces raiz ß n Sino // encuentra su ubicacion aux ß raiz Mientras(aux ≠ null) Entonces posP ß aux Si(valor > aux.obtenerValor) Entonces aux ß aux.obtenerHD Sino aux ß aux.obtenerHI fsi fMientras // hace la insersion Si(num > posP.obtenerValor) Entonces posP.colocarHD(n) Sino posP.colocarHI(n) fSi fSi fSifMetodo //busca un numero en el arbolMétodo CArbol.Nodo buscar(valor) àCNodo aux // empieza por la raiz aux ß raiz // mientras no sea nulo mientras(aux ≠ null)Hacer Si(num=aux.obtenerValor) Entonces return aux // retorna nodo encontrado Sino Si (num > aux.obtenerValor) Entonces // avanza por la derecha aux = aux.obtenerHD Sino // avanza por la izquierda aux = aux.obtenerHI fSi fSi fMientras retornar null

Reyes Marzano, Alejandro [email protected]

Page 11: Ordenamiento+y+Busqueda.pdf

Algoritmos de Ordenacion y busqueda fisi unmsm

fMetodo Método CArbol.colocarRaiz(raiz) raiz ß raizfMetodo ordenamiento mergeSort para lista en C#include <stdio.h>#define MAX 100 struct Nodo{ int numero; Nodo *sig;};typedef struct Nodo Lista;typedef Lista * lista; void crearLista (lista *);int numNodo (lista inicio);void mostrarLista (lista);void FreeLista (lista *);void mergeSort (int, int, lista *);void mezcla (int, int, int, int, lista *); void main (){ lista inicio= NULL; clrscr(); crearLista(&inicio); printf("Numeros generados aleatoriamente:\n"); mostrarLista(inicio); int l= numNodo(inicio)-1; mergeSort(0,MAX-1,&inicio); printf("\n\nNumeros ordenados:\n"); mostrarLista(inicio); FreeLista(&inicio); getch();} int aleatorio(int li, int ls){ int n; do{ n=rand()*(ls-li+1)/300+li; }while(n<li||n>ls);

Reyes Marzano, Alejandro [email protected]

Page 12: Ordenamiento+y+Busqueda.pdf

Algoritmos de Ordenacion y busqueda fisi unmsm

return n;} void crearLista (lista *inicio){ int i; lista nuevo, temp; for (i=0; i<MAX; i++){ nuevo= (lista) malloc(sizeof(Lista)); nuevo->sig= NULL; nuevo->numero= aleatorio(0,1000); if (*inicio == NULL) *inicio= nuevo; else{ temp= *inicio; while (temp->sig != NULL) temp= temp->sig; temp->sig= nuevo; } }} void mostrarLista (lista inicio){ if (inicio != NULL){ printf("%d ",inicio->numero); mostrarLista(inicio->sig); }} int numNodo (lista inicio){ int c=0; while (inicio != NULL){ inicio=inicio->sig; c++; } c;} void FreeLista (lista *inicio){ lista temp= *inicio; if (*inicio != NULL){ FreeLista(&((*inicio)->sig)); free(temp); }} void mergeSort (int ini, int fin, lista *inicio){

Reyes Marzano, Alejandro [email protected]

Page 13: Ordenamiento+y+Busqueda.pdf

Algoritmos de Ordenacion y busqueda fisi unmsm

int m, m1; if (ini < fin){ m= (ini+fin)/2; m1= m+1; mergeSort(ini,m,&(*inicio)); mergeSort(m1,fin,&(*inicio)); mezcla(ini,m,m1,fin,&(*inicio)); }} void mezcla (int ini, int m, int m1, int fin, lista *inicio){ lista ci, cj; int i, j, k= 0, kC[MAX]; ci= cj= *inicio; for (i=k; i<ini; i++,ci=ci->sig); for (j=k; j<m1; j++ ,cj=cj->sig); kC[k]= k; while (i<=m || j<=fin){ if (i > m){ kC[k]= cj->numero; j++; cj= cj->sig; } else if (j > fin){ kC[k]= ci->numero; i++; ci= ci->sig; } else if (ci->numero < cj->numero){ kC[k]= ci->numero; i++; ci= ci->sig; } else{ kC[k]= cj->numero; j++; cj= cj->sig; } k++; } for (ci=*inicio,i=k-k; i<ini; i++,ci=ci->sig); for (k=0; i<=fin; i++, k++,ci=ci->sig) ci->numero= kC[k];

Reyes Marzano, Alejandro [email protected]

Page 14: Ordenamiento+y+Busqueda.pdf

Algoritmos de Ordenacion y busqueda fisi unmsm

}

Reyes Marzano, Alejandro [email protected]