1 Introduccin
Ordenacin Bsqueda Operaciones bsicas Intercalacin Computadora Computacin
Mitad de su tiempo
Por Ej:
Buscar Palabras
Ordenacin
Operacin
organizar
Ordenacin
frecuente usuarios importante aplicacin describe fcilmente registros o archivos aplica vectores(arrays) mayor aplicacin Fcil comprensin algoritmos
Ordenacin
3.2 Ordenacin
Ordenacin
proceso
organizar datos
orden
Ordenacin
operacin frecuente
Eleccin
algoritmos
memoria disponible
Mtodos Ordenacin Directos se usan Burbuja listas pequeas Seleccin Insercin
Mtodo Burbuja
usa
Variable auxiliar
Mtodo 1:
Desde i=0 hasta n-2 hacer Desde j=0 hasta n-2 hacer Si (vec[j] > vec[j+1]) entonces aux = vec[j] vec[j] = vec[j+1] vec[j+1] = aux Fin_si Fin_desde Fin_desde
Ej 1: Realizar la prueba de escritorio utilizando el mtodo burbuja (Mtodo 1) para el siguiente vector vec = {72,64,50,23,84,18,37,99,45}
Ej 2: Realizar la prueba de escritorio utilizando el mtodo burbuja (Mtodo 1) para el siguiente vector vec = {7, 3, 2, 1, 9, 6, 7, 5, 4}
Mtodo 2
Desde i=0 hasta n-2 hacer Desde j=0 hasta n-i-2 hacer Si (vec[j] > vec[j+1]) entonces aux = vec[j] vec[j] = vec[j+1] vec[j+1] = aux Fin_si Fin_desde Fin_desde
Ej 1: Realizar la prueba de escritorio utilizando el mtodo burbuja (Mtodo 2) para el siguiente vector vec = {72,64,50,23,84,18,37,99,45}
Ej 2: Realizar la prueba de escritorio utilizando el mtodo burbuja (Mtodo 2) para el siguiente vector vec = {7, 3, 2, 1, 9, 6, 7, 5, 4}
Mtodo 3
BANDERA = F i = 0 Mientras ((BANDERA = F) Y (i<n-2)) hacer BANDERA = V Desde j=0 hasta n-i-2 hacer Si (vec[j] > vec[j+1]) entonces aux = vec[j] vec[j] = vec[j+1] vec[j+1] = aux BANDERA = F Fin_si Fin_desde i = i +1 Fin_mientras
Ej 1: Realizar la prueba de escritorio utilizando el mtodo burbuja (Mtodo 3) para el siguiente vector vec = {72,64,50,23,84,18,37,99,45}
Ej 2: Realizar la prueba de escritorio utilizando el mtodo burbuja (Mtodo 3) para el siguiente vector vec = {7, 3, 2, 1, 9, 6, 7, 5, 4}
Insertar elementos
Consiste
vector
ordenado
Comienza de nuevo
elementos restantes
Mtodo Insercin
Mtodo Baraja
Mtodo Insercin
se recorre
todo el vector
desde la posicin 2 se va insertando cada elemento lugar adecuado
Mtodo 1
Desde i=1 hasta n-1 hacer aux = vec[i] k = i-1 sw = falso Mientras ((no sw) y (k>=0)) hacer Si (aux < vec[k]) entonces vec[k+1] = vec[k] k = k-1 Si_no Sw = verdadero Fin_si Fin_mientras vec[k+1] = aux Fin_desde
Ej 1: Realizar la prueba de escritorio utilizando el mtodo de insercin (Mtodo 1) para el siguiente vector vec = {72,64,50,23,84,18,37,99,45}
Ej 2: Realizar la prueba de escritorio utilizando el mtodo de insercin (Mtodo 1) para el siguiente vector vec = {7, 3, 2, 1, 9, 6, 7, 5, 4}
Mtodo 2
Desde i=1 hasta n-1 hacer tmp = vec[i] Desde j=i hasta ((j>0) Y (tmp<vec[j-1]))decremento 1 hacer vec[j] = vec[j-1] Fin_desde vec[j] = tmp Fin_desde
Ej 1: Realizar la prueba de escritorio utilizando el mtodo de insercin (Mtodo 2) para el siguiente vector vec = {72,64,50,23,84,18,37,99,45}
Ej 2: Realizar la prueba de escritorio utilizando el mtodo de insercin (Mtodo 2) para el siguiente vector vec = {7, 3, 2, 1, 9, 6, 7, 5, 4}
Tambin
utiliza
variable auxiliar
Mtodo 1
Desde i=0 hasta n-2 hacer aux = vec[i] k = i Desde j=i+1 hasta n-1 hacer Si (vec[j] < aux) entonces aux = vec[j] k = j Fin_si Fin_desde vec[k] = vec[i] vec[i] = aux Fin_desde
Ej 1: Realizar la prueba de escritorio utilizando el mtodo de seleccin (Mtodo 1) para el siguiente vector vec = {72,64,50,23,84,18,37,99,45}
Ej 2: Realizar la prueba de escritorio utilizando el mtodo de seleccin (Mtodo 1) para el siguiente vector vec = {7, 3, 2, 1, 9, 6, 7, 5, 4}
Mtodo 2
i = 0 mientras (i<N-1) hacer aux= vec[i] k = i j = i mientras j< N-1 hacer j = j + 1 si (vec[j] < aux) entonces aux = vec[j] k = j fin_si fin_mientras vec[k] = vec[i] vec[i] = aux i = i + 1 fin_mientras
Ej 1: Realizar la prueba de escritorio utilizando el mtodo de seleccin (Mtodo 2) para el siguiente vector vec = {72,64,50,23,84,18,37,99,45}
Ej 2: Realizar la prueba de escritorio utilizando el mtodo de seleccin (Mtodo 2) para el siguiente vector vec = {7, 3, 2, 1, 9, 6, 7, 5, 4}
grande
shell
incrementos
decrecientes
Shell
modifico
saltos contiguos
comparaciones
por
saltos constantes > 1 posicin
k = 0 salto = N/2 mientras (salto > 0) hacer desde i=salto hasta N-1 hacer j = i- salto mientras (j >=0) hacer { k = j + salto si (vec[j] <= vec[k]) entonces j = 0 si_no { aux = vec[j] vec[j] = vec[k] vec[k] = aux fin_si j = j - salto fin_mientras fin_desde salto = (salto) / 2 fin_mientras
Ej 1: Realizar la prueba de escritorio utilizando el mtodo de shell para el siguiente vector vec = {72,64,50,23,84,18,37,99,45}
Ej 2: Realizar la prueba de escritorio utilizando el mtodo shell para el siguiente vector vec = {7, 3, 2, 1, 9, 6, 7, 5, 4}
Se basa
Se elige
elemento vector
medio
pivote
Por intercambios
Lado izquierdo Sern menores Lado derecho Sern mayores
Q pivote
Q pivote
Hecho esto
dos subvectores
recursividad
procede
ordenacin
ini = 0 fin = N-1 i = ini j = fin pivote = vec[(ini + fin) / 2] mientras (i<=j) hacer mientras (vec[i] < pivote) hacer i = i +1 Fin_mientras Mientras (vec[j] > pivote) hacer J = j -1 Fin_mientras Si (i <= j) entonces aux = vec[j] vec[j] = vec[i] vec[i] = aux i++ j-Fin_si Fin_mientras Si (ini<j) entonces Orde (vec, ini, j) Fin_si Si (fin>i) entonces Orde (vec, i, fin) Fin_si
3.3 Bsquedas
Se refieren
encontrar elementos
dentro conj. Elementos
Si encuentra
Elemento Encontrado
el valor deseado
encuentre termine leer vector completo
Vector
no ordenado
Mtodo 1
t = 5 //elemento a buscar n = tamano_vector -1 desde i=0 hasta n-1 hacer si (t == vec[i]) entonces escribir ("Elemento encontrado") escribir("En la posicion"+i); fin_si fin_desde
Mtodo 2
t = 20 //elemento a buscar i = 0 mientras (i<= n) hacer si (t == vec[i]) entonces escribir ("Elemento encontrado") escribir("En la posicion"+i) i = n + 1 si_no i = i +1 fin_si fin_mientras
Mtodo 3
t = 80 n = tamano_vector -1 i = 0 encontrado = falso mientras ((no encontrado) y (i<=n)) hacer si (vec[i]== t) entonces encontrado = verdadero fin_si i = i +1 fin_mientras si (encontrado == verdadero) entonces escribir ("Elemento encontrado") escribir("En la posicion" + i-1); si_no escribir ("Elemento no encontrado) fin_si
3.3.2 Bsqueda Binaria Divide y vencers Examina si encontrado busq. Terminada elemento central caso contrario elemento primera mitad segunda mitad sucesivamente localiza valor deseado
Bsqueda Binaria
grandes cantidades
datos
bajo = 0 alto = n-1 central = ((bajo + alto) / 2) k = valor a buscar mientras ((bajo <= alto) y (vec[central <> k])) hacer si (k < vec[central]) entonces alto = central - 1 sino bajo = central + 1 fin_si central = ((bajo + alto)/2) fin_mientras si (k == vec[cental]) entonces escribir ("Elemento encontrado") si_no escribir ("Elemento no encontrado")
Ej 1: Realizar la prueba de escritorio de la bsqueda binaria ,dado el sgte vector y dato a buscar. vec = {18, 23, 37, 45, 50,64,72,84,99} t=45
Ej 2: Realizar la prueba de escritorio de la bsqueda binaria ,dado el sgte vector y dato a buscar. vec = {1, 2, 3, 4, 5, 6, 7, 7, 9} t=9
2 vectores ordenados
producir
nuevo vector
Compara
i=0 j=0 k=0 n = tamano vec1 m = tamano vec2 mientras ((i<n) y (j<m)) hacer si (vec1[i] < vec2[j]) entonces vec3[k] = vec1[i] i = i + 1 sino vec3[k] = vec2[j] j = j + 1 fin_si k = k + 1 fin_mientras si (i < n) entonces desde r = i hasta n hacer vec3[k] = vec1[r] k = k +1 fin_desde sino desde r = j hasta m hacer vec3[k] = vec2[r] k = k +1 fin_desde fin_si