Coder Social home page Coder Social logo

classroom-ufersa / insertionsort Goto Github PK

View Code? Open in Web Editor NEW
12.0 0.0 2.0 64 KB

Algoritmo de ordenação de strings em C, Python e JS

Home Page: https://classroom-ufersa.github.io/InsertionSort/

C 32.63% Python 14.59% JavaScript 3.39% HTML 49.39%
insertion-sort python hacktoberfest

insertionsort's Introduction

InsertionSort

O InsertionSort é um algoritmo de ordenação que, dado uma estrutura (array, lista) constrói uma matriz final com um elemento de cada vez, uma inserção por vez. Assim como algoritmos de ordenação quadrática, é bastante eficiente para problemas com pequenas entradas, sendo o mais eficiente entre os algoritmos desta ordem de classificação.

Gif: Wikipedia

Gif: Wikipedia

Veja exemplos abaixo que ilustram a implementação básica do algoritmo Insertion Sort em diferentes linguagens de programação. Vale ressaltar que existem diversas maneiras de implementar o algoritmo, com variações que podem torná-lo mais eficiente ou adaptá-lo para diferentes tipos de dados.

C

void insertionSort(int arr[], int n) {
    int i, key, j;
    for (i = 1; i < n; i++) {
        key = arr[i];
        j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j = j - 1;
        }
        arr[j + 1] = key;
    }
}

Python

def insertionSort(arr):
    for i in range(1, len(arr)):
        key = arr[i]
        j = i - 1
        while j >= 0 and arr[j] > key:
            arr[j + 1] = arr[j]
            j -= 1
        arr[j + 1] = key

JavaScript

function insertionSort(arr) {
    for (let i = 1; i < arr.length; i++) {
        let key = arr[i];
        let j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
}

Visualize a funcionalidade do codigo na pratica acessando o pages do projeto

Como funciona

Na implementação do algoritmo de InsertionSort, temos um loop que se repete sobre um array, começando a partir do segundo elemento (índice 1) e percorrendo todos os elementos até o final. Dentro deste loop, temos outro loop while que compara o elemento atual com o elemento anterior e, se o elemento atual for menor que o anterior, troca as suas posições. Este loop while continua até que o elemento atual esteja na posição correta.

Características

Apesar de ser menos eficiente do que algoritmos como Merge Sort e Quick Sort (de ordem O(nlog(n))), o Insertion Sort possui algumas características consideráveis:

  • É de simples implementação, leitura e manutenção;
  • In-place: Apenas requer uma quantidade constante de O(1) espaço de memória adicional;
  • Estável: Não muda a ordem relativa de elementos com valores iguais;
  • Útil para pequenas entradas;
  • Muitas trocas, e menos comparações;
  • Melhor caso: O(n), quando a matriz está ordenado;
  • Médio caso: O(n²/4), quando a matriz tem valores aleatórios sem ordem de classificação (crescente ou decrescente);
  • Pior caso: O(n²), quando a matriz está em ordem inversa, daquela que deseja ordenar.

Vantagens e Desvantagens

  • Vantagem:

    • É o método a ser utilizado quando o arquivo está "quase" ordenado;
    • É um bom método quando se desejar adicionar poucos elementos em um arquivo já ordenado, pois seu custo é linear;
    • O algoritmo de ordenação por inserção é estável.
  • Desvantagem:

    • Alto custo de movimentação de elementos no vetor.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.