Ordenação de Vetores

De Wiki Cursos IFPR Foz
Revisão de 14h32min de 2 de setembro de 2014 por Evandro.cantu (discussão | contribs)
Ir para navegaçãoIr para pesquisar

Ordenação de Vetores

Os métodos de ordenação de vetores consistem em ordenar os vetores em ordem crescente (ou decrescente) de valores.

Os métodos mais conhecidos são:

  • Método de seleção (selection sort)
  • Método de inserção (insertion sort)
  • Método da bolha (bubble sort)

Método de seleção (selection sort)

O selection sort é um algoritmo de ordenação baseado em se passar sempre o menor valor do vetor para a primeira posição, depois o de segundo menor valor para a segunda posição, e assim é feito sucessivamente com os (n-1) elementos restantes, até os últimos dois elementos [1].

void SelectionSort(int[] vetor)
{
    int min, aux;
    for (int i = 0; i < vetor.Length - 1; i++)
    {
        min = i;
        for (int j = i + 1; j < vetor.Length; j++)
            if (vetor[j] < vetor[min])
                min = j;
        if (min != i)
        {
             aux = vetor[min];
             vetor[min] = vetor[i];
             vetor[i] = aux;
        }
    }
}

Método de inserção (insertion sort)

O insertion sort é um simples de algoritmo de ordenação, eficiente quando aplicado a um pequeno número de elementos. Em termos gerais, ele percorre um vetor de elementos da esquerda para a direita e à medida que avança vai deixando os elementos mais à esquerda ordenados [2].

void insertionSort(int numeros[], int tam) {
   int i, j, eleito;
   for (i = 1; i < tam; i++){
      eleito = numeros[i];
      j = i - 1;
      while ((j>=0) && (eleito < numeros[j])) {
         numeros[j+1] = numeros[j];
         j--;
      }
      numeros[j+1] = eleito;
   }
}

Método da bolha (bubble sort)

O bubble sort, ou ordenação por flutuação, é um algoritmo de ordenação dos mais simples. A ideia é percorrer o vector diversas vezes, a cada passagem fazendo flutuar para o topo o maior elemento da sequência. Essa movimentação lembra a forma como as bolhas em um tanque de água procuram seu próprio nível, e disso vem o nome do algoritmo [3].

void bubble_sort(int vetor[], int tamanho) {
    int comparacoes = 0;
    int trocas = 0;

    for(int i=tamanho-1; i >= 1; i--) {
        for(int j=0; j < i ; j++) {
            comparacoes ++;
            if(vetor[j]>vetor[j+1]) {
                 aux = vetor[j];
                 vetor[j] = vetor[j+1];
                 vetor[j+1] = aux;
                 trocas++;
            }
        }
    }
}

Referências


--Evandro.cantu (discussão) 11h18min de 2 de setembro de 2014 (BRT)