Algoritmos de Ordenação

 Bubble Sort


def bubblesort(lista, n):
    troca = True
    while troca:
        troca = False
        for i in range(n-1):
            if lista[i] > lista[i+1]:
                lista[i], lista[i+1] = lista[i+1], lista[i]
                troca = True
        n-=1
    return lista

Insertion Sort

 
def insertionSort(lista):
    for i in range(1, len(lista)):
        chave = lista[i]
        j = i
        while j > 0 and lista[j - 1] > chave:
            lista[j] = lista[j - 1]
            j = j - 1
        lista[j] = chave
    return lista

Selection Sort


def selection(lista):
    n = len(lista)
    for i in range(n-1):
        mini = i
        for j in range(i+1, n):
            if lista[j] < lista[mini]:
                mini = j
        lista[i], lista[mini] = lista[mini], lista[i]
    return lista

Merge Sort


def mergeSort(lista):
    if len(lista)>1:
        meio = len(lista)//2
        ladoEsquerdo = lista[:meio]
        ladoDireito = lista[meio:]

        mergeSort(ladoEsquerdo)
        mergeSort(ladoDireito)

        i, j, k =0, 0, 0
        while i < len(ladoEsquerdo) and j < len(ladoDireito):
            if ladoEsquerdo[i] < ladoDireito[j]:
                lista[k]= ladoEsquerdo[i]
                i=i+1
            else:
                lista[k]=ladoDireito[j]
                j=j+1
            k=k+1

        while i < len(ladoEsquerdo):
            lista[k]=ladoEsquerdo[i]
            i=i+1
            k=k+1

        while j < len(ladoDireito):
            lista[k]=ladoDireito[j]
            j=j+1
            k=k+1

Quick Sort


def quicksort(vetor):
    if len(vetor) <= 1:
        return vetor
    menor, igual, maior = [], [], []
    pivo = vetor[0]
    for x in vetor:
        if x < pivo:
            menor.append(x)
        elif x == pivo:
            igual.append(x)
        else:
            maior.append(x)
    return quicksort(menor) + igual + quicksort(maior)
    

Sell Sort


def shellsort(nums):
    n = len(nums)
    h = int(n/2)
    while h > 0:
        #insertion sort
        for i in range(h, n):
            c = nums[i]
            j = i
            while j >= h and c < nums[j - h]:
                nums[j] = nums[j - h]
                j -= h
            nums[j] = c
        h = int(h/2.2)
    return nums

Conteúdo da matéria de Fundamentos de Problemas Computacionais I.

Postar um comentário

0 Comentários