Clase 6 - Algoritmos de Ordenamiento Seleccion + Merge + Quick

12
Clase 6 Metodos de Ordenamiento

description

Métodos de Ordenaciento, Algoritmos de la burbuja, binario

Transcript of Clase 6 - Algoritmos de Ordenamiento Seleccion + Merge + Quick

  • Clase 6 Metodos de

    Ordenamiento

  • Temario- Ordenamiento por Seleccin- Merge Sort- Quick Sort

  • Este es el algoritmo mas sencillo Para ordenar un vector de n elementos L = [a1, , an] busca el elemento menor y lo ubica al comienzo Para mantener la dimensin del vector se intercambia con el primero de la listaa continuacin y sabiendo que el primero es el menor, se busca el segundo elemento a partir de a2 y se intercambia con este.

    Ordenamiento por Seleccin

  • Cdigo por Seleccindef buscarMenor(L):

    menor = 1000for x in L:

    if x < menor :menor = x

    return menor

    def ordenamiento_seleccion(L):for x in range(0, len(L)):

    sublista = L[x:]menor = buscarMenor(sublista)indice = sublista.index(menor)L[indice+x] = L[x]L[x] = menor

  • Dividir el problema en k subproblemas del mismo tipo, pero de tamao menor.

    Vencer es resolver independientemente todos los subproblemas, bien directamente si son elementales o bien de forma recursiva.

    Combinar las soluciones de los subproblemas para obtener la solucin del problema original.

    Antes de seguir ..Divide y vencers

  • Dividir: Dividir la sucesin de n elementos en dos subsucesiones de aproximadamente n/2 elementos cada una de ellas, k = 2.

    Vencer: Ordenar las dos subsucesiones recursivamente. Combinar: Mezclar las dos subsucesiones ordenadas y obtener la salida.

    Ordenar Mezclando Merge Sort

  • Elegimos el elemento menor entre los ltimos de cada lista;

    lo quitamos de esa lista y lo ponemos en una nueva lista;

    repetimos este procedimiento hasta que no haya elementos en alguna de las listas;

    entonces slo tenemos que agarrar el resto de los elementos de la otra lista y ponerlos en la lista final

    Y como mezclamos? Dos listas..

  • Cdigo Mezclandodef mezclando(izquierda, derecha): ordenada=[] i, j = 0,0 while i < len(izquierda) and j < len(derecha): if izquierda[i]
  • Ahora s... cdigo Merge Sort

    def ordenar_mezclando(L): if len(L) < 2: return L else: mitad= len(L)/2 izquierda=ordenar_mezclando(L[:mitad]) derecha=ordenar_mezclando(L[mitad:]) return mezclando(izquierda,derecha)

  • Es otra forma de ordenar recursiva utilizando la tcnica de divide y venceras

    Toma un numero random (generalmente la mitad de la lista)

    ubica todos los menores de ese numero en una lista y los mayores en otra lista

    Vuelve a llamar a quick sort con el elemento pivot en el medio suponiendo que esta ordenado

    Quick Sort

  • Cdigo - Quick Sortdef QuickSort(List): if List == [] or len(List) == 1: return List else : pivotPos = randint(0,len(List)-1) pivot = List[pivotPos] greater = [] lesser = [] for i in range(0,len(List)): if List[i] < pivot and i != pivotPos : lesser.append(List[i]) else : if i != pivotPos : greater.append(List[i]) return QuickSort(lesser) + [pivot] + QuickSort(greater)

  • Fin - Preguntas

    Pgina 1Example Bullet Point slidePgina 3Pgina 4Pgina 5Pgina 6Pgina 7Pgina 8Pgina 9Pgina 10Pgina 11Pgina 12