algotitmos de ordenamiento.

     En la entrada de esta semana se hablará sobre el tema de algoritmos de ordenamiento, que es un algoritmo de ordenamiento, cuales son algunos de los más conocidos y de estos cual se caracteriza por ser el más rápido y cuales son más lentos, e ineficientes.





     Para iniciar este tema es importante como lo hemos hecho en entradas anteriores, aclarar algunas definiciones para llegar al tema central. Como nuestro tema central es algoritmos de ordenamiento pues vamos a definir este término, ¿Que es un algoritmo? Según la RAE (Real Academia Española) un algoritmo se define como “Conjunto ordenado y finito de operaciones que permite hallar la solución de un problema” y el ordenamiento es “Acción y efecto de ordenar” entonces podemos decir de un algoritmo de ordenamiento es un conjunto finito de operaciones que nos permite ordenar datos.

     Se comentará sobre el funcionamiento de 4 algoritmos de ordenamiento los cuales son:
·         Bubble Sort.
·         Selection Sort.
·         Insertion Sort.
·         Quicksort.

Bubble Sort
     Según el artículo “Ordenar por Bubble - Bubble Sort” de Jorge P este algoritmo “clasifica a través de toda la matriz comparando cada uno de los elementos con el siguiente elemento e intercambiarlos si es necesario. Al final de este proceso, el elemento más grande se encuentra en la última posición de la disposición, mientras que todos los elementos menores han "ascendido" a una posición. El proceso continúa repitiendo de nuevo desde la posición de fijación inicial hasta que cada elemento "caiga" a su posición correcta”. Entonces si hacemos un análisis de esto podemos ver que este algo ritmo es muy ineficiente es porque deben recorrer toda la estructura para ordenar elemento por elemento. La programación de su código es en iteración y es la siguiente; brindada por Mauricio Avilés en su presentación “Estructuras de datos”.
           

def bubble_sort(lista):
    swap = True
    while swap:
        swap = False
        i = 0
        while i < len(lista)-1:
            if lista[i] > lista[i+1]:
                temp = lista[i]
                lista[i] = lista[i+1]
                lista[i+1] = temp
                swap = True
            i +=1
    return lista


Selection Sort
     Este Algoritmo según la presentación elaborada por Mauricio Avilés tampoco es muy eficiente para listas grandes, funciona encontrando el menor elemento de la lista lo intercambia con el primero de la lista y repite lo mismo con el resto de la lista.
     Este también está programado de manera iterativa y su código es este:


def selection_sort(lista):
    for i in range(0, len(lista)):
        m = i+menor(lista[i:])
        temp = lista[m]
        lista[m] = lista[i]
        lista[i] = temp
    return lista
def menor(lista):
    m = 0
    for i in range(0, len(lista)):
        if lista[i] < lista[m]:
            m = i
    return m


Insertion Sort
     Pascal LOEWENGUTH en si artículo “Ordenamiento por inserción·” nos define la forma de funcionar de este algoritmo de la siguiente manera “Este algoritmo de ordenación consiste en ir insertando un elemento de la lista ó un arreglo en la parte ordenada de la misma, asumiendo que el primer elemento es la parte ordenada, el algoritmo ira comparando un elemento de la parte desordenada de la lista con los elementos de la parte ordenada, insertando el elemento en la posición correcta dentro de la parte ordenada, y así sucesivamente hasta obtener la lista ordenada.” Se dice que este es el que funciona más similar a la manera natural en que los humanos ordenamos cosas.
     Tomando como referencia la presentación de Mauricio Avilés obtenemos el código de este algoritmo en iteración:
           

def insertsort(lista):
    for i in range(1,len(lista)):
        pos = i
        while pos > 0 and lista[pos-1] > lista[i]:
            pos -= 1
        lista = lista[:pos] + [lista[i]] + lista[pos:i] + lista[i+1:]
    return lista


Quicksort
     Este es el último de los algoritmos que comentaremos en esta entrada. Este cuenta con la particularidad que a diferencia de los anteriores es bastante eficiente, realizando el ordenamiento de manera muy rápida sin importar la extensión de la estructura sobre la que se trabaje. Este algoritmo es originalmente recursivo.
     Oscar Campos en su artículo “Implementando el algoritmo QuickSort” menciona la forma en la que funciona este algoritmo “El algoritmo QuickSort se basa en la técnica de "divide y vencerás" por la que, en cada recursión, el problema se divide en sub problemas de menor tamaño y se resuelven por separado (aplicando la misma técnica) para ser unidos de nuevo una vez resueltos.”
     El código tomado de la presentación de Mauricio Avilés es el siguiente:

def qsaux(lista):
    if len(lista)==1 or len(lista)==0:
        return lista
    else:
        pivote = lista[-1]
        menores = [x for x in lista[:-1] if x < pivote]
        mayores = [x for x in lista[:-1] if x >= pivote]
        return qsaux(menores) + [pivote] + qsaux(mayores)


     Luego de leer y analizar estos 4 algoritmos de ordenamiento podemos ver que todos a pesar de que cumplen una misma función la cual es ordenar, todas están programadas de distintas maneras, algunas más eficientes que otras, esto nos deja claro que en la programación existen miles de formas de resolver un determinado problema, y lo que siempre se busca es la mejor la más optima, eficaz y eficiente.


Fuentes:

     

Comentarios

Entradas populares de este blog

Estructuras de datos lineales y no lineales

Archivos en la computación ¿Que es un archivo?

Compresion de archivos