Sie sind auf Seite 1von 12

Clase 6

Metodos de
Ordenamiento

Temario
- Ordenamiento por Seleccin
- Merge Sort
- Quick Sort

Ordenamiento por Seleccin


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 lista
a continuacin y sabiendo que el primero es el
menor, se busca el segundo elemento a partir de a2 y
se intercambia con este.

Cdigo por Seleccin


def buscarMenor(L):
menor = 1000
for 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

Antes de seguir ..Divide y vencers


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.

Ordenar Mezclando Merge


Sort
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.

Y como mezclamos? Dos


listas..
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

Cdigo Mezclando
def mezclando(izquierda, derecha):
ordenada=[]
i, j = 0,0
while i < len(izquierda) and j <
len(derecha):
if izquierda[i] <= derecha[j]:
ordenada.append(izquierda[i])
i=i+1
else:
ordenada.append(derecha[j])
j=j+1
ordenada +=izquierda[i:]
ordenada +=derecha[j:]
return ordenada

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)

Quick Sort
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

Cdigo - Quick Sort


def 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

Das könnte Ihnen auch gefallen