Hola amigos tiempo atrás realice un post acerca delos diferentes métodos de ordenación y su respectivo análisis de complejidad con su implementacion en java, si desean verlo pueden pasarse por la siguiente publicación:
En la presente publicación comparto con ustedes la implementación de estos métodos pero en python, un lenguaje de programación con el cual comencé a trabajar y me vi con la necesidad de implementar estos métodos
Método de ordenamiento Burbuja:
def ordenamientoBurbuja(lista,tam): for i in range(1,tam): for j in range(0,tam-i): if(lista[j] > lista[j+1]): k = lista[j+1] lista[j+1] = lista[j] lista[j] = k; def imprimeLista(lista,tam): for i in range(0,tam): print lista[i] def leeLista(): lista=[] cn=int(raw_input("Cantidad de numeros a ingresar: ")) for i in range(0,cn): lista.append(int(raw_input("Ingrese numero %d : " % i))) return lista A=leeLista() ordenamientoBurbuja(A,len(A)) imprimeLista(A,len(A))
Método de ordenamiento Shell Sort:
def ordenShell(lista,tam): inc=1 for inc in range(1,tam,inc*3+1): while inc>0: for i in range(inc,tam): j=i temp=lista[i] while j>=inc and lista[j-inc]>temp: lista[j]=lista[j-inc] j=j-inc lista[j]=temp inc=inc/2 def imprimeLista(lista,tam): for i in range(0,tam): print lista[i] def leeLista(): lista=[] cn=int(raw_input("Cantidad de numeros a ingresar: ")) for i in range(0,cn): lista.append(int(raw_input("Ingrese numero %d : " % i))) return lista
Método de ordenamiento QuickSort:
def quicksort(lista,izq,der): i=izq j=der x=lista[(izq + der)/2] while( i <= j ): while lista[i]< x and j< =der: i=i+1 while x< lista[j] and j > izq: j=j-1 if i<=j: aux = lista[i]; lista[i] = lista[j]; lista[j] = aux; i=i+1; j=j-1; if izq < j: quicksort( lista, izq, j ); if i < der: quicksort( lista, i, der ); def imprimeLista(lista,tam): for i in range(0,tam): print lista[i] def leeLista(): lista=[] cn=int(raw_input("Cantidad de numeros a ingresar: ")) for i in range(0,cn): lista.append(int(raw_input("Ingrese numero %d : " % i))) return lista A=leeLista() quicksort(A,0,len(A)-1) imprimeLista(A,len(A))
Método de ordenamiento QuickSort:
def quicksort(lista,izq,der): i=izq j=der x=lista[(izq + der)/2] while( i <= j ): while lista[i]< x and j<=der: i=i+1 while x< lista[j] and j>izq: j=j-1 if i<=j: aux = lista[i]; lista[i] = lista[j]; lista[j] = aux; i=i+1; j=j-1; if izq < j: quicksort( lista, izq, j ); if i < der: quicksort( lista, i, der ); def imprimeLista(lista,tam): for i in range(0,tam): print lista[i] def leeLista(): lista=[] cn=int(raw_input("Cantidad de numeros a ingresar: ")) for i in range(0,cn): lista.append(int(raw_input("Ingrese numero %d : " % i))) return lista A=leeLista() quicksort(A,0,len(A)-1) imprimeLista(A,len(A))
Método de ordenamiento Insercion:
def insercion(lista,tam): for i in range(1,tam): v=lista[i] j=i-1 while j >= 0 and lista[j] > v: lista[j+1] = lista[j] j=j-1 lista[j+1]=v def imprimeLista(lista,tam): for i in range(0,tam): print lista[i] def leeLista(): lista=[] cn=int(raw_input("Cantidad de numeros a ingresar: ")) for i in range(0,cn): lista.append(int(raw_input("Ingrese numero %d : " % i))) return lista A=leeLista() insercion(A,len(A)) imprimeLista(A,len(A))
Método de ordenamiento HeapSort:
def heapsort(lista,tam): for k in range(tam-1,-1,-1): for i in range(0,k): item=lista[i] j=(i+1)/2 while j>=0 and lista[j]< item: lista[i]=lista[j] i=j j=j/2 lista[i]=item temp=lista[0]; lista[0]=lista[k]; lista[k]=temp; def imprimeLista(lista,tam): for i in range(0,tam): print lista[i] def leeLista(): lista=[] cn=int(raw_input("Cantidad de numeros a ingresar: ")) for i in range(0,cn): lista.append(int(raw_input("Ingrese numero %d : " % i))) return lista A=leeLista() heapsort(A,len(A)) imprimeLista(A,len(A))
Método de ordenamiento MergeSort:
def merge_sort(lista): n = len(lista) if(n == 1): return lista izquierda = merge_sort(lista[:(n/2)]) derecha = merge_sort(lista[(n/2):]) return merge(izquierda, derecha) def merge(izquierda, derecha): resultado = [] i = 0 j = 0 len_izquierda = len(izquierda) len_derecha = len(derecha) while(i < len_izquierda or j < len_derecha): if(i >= len_izquierda): resultado.append(derecha[j]) j = j + 1 elif(j >= len_derecha): resultado.append(izquierda[i]) i = i + 1 elif(izquierda[i] < derecha[j]): resultado.append(izquierda[i]) i = i + 1 else: resultado.append(derecha[j]) j = j + 1 return resultado def imprimeLista(lista): for i in range(0,len(lista)): print (str(lista[i])) def leeLista(): lista=[] cn=int(input("Cantidad de numeros a ingresar: ")) for i in range(0,cn): lista.append(int(input("Ingrese numero %d : " % i))) return lista A=leeLista() merge_sort(A) imprimeLista(A)
0 comentarios: