Seleção Classificação de tempo Complexidade

Seleção Classificação de tempo Complexidade
O tipo de seleção é um tipo de algoritmo de classificação. Uma lista não classificada pode ser classificada em ordem ascendente ou em ordem decrescente. Considere a lista não classificada:
55 65 35 15 85 75 25 45

Se esta lista for classificada em ordem crescente, seria:

15 25 35 45 55 65 75 85

Se a lista for classificada em ordem decrescente, seria:

85 75 65 55 45 35 25 15

Neste artigo, apenas a classificação em ordem ascendente é considerada. Classificação de seleção Classifica procurando por pequenos elementos e trocando -os com os elementos iniciais, começando pelo menor elemento, enquanto os elementos iniciais substituídos se tornam ascendentes. Uma lista deve ser classificada em ordem crescente no final deste processo.

O artigo tem como objetivo determinar a complexidade do tempo do tipo de seleção. A programação a seguir é feita na linguagem C.

Algoritmo de classificação de seleção

As etapas para o tipo de seleção são as seguintes:

  • Suponha que o primeiro elemento seja o menor elemento.
  • Compare este elemento com os outros elementos para conhecer o verdadeiro elemento menor.
  • Troque o menor elemento encontrado com o primeiro elemento.
  • Repita as três etapas anteriores em ordem, excluindo o primeiro elemento substituído.
  • Continue repetindo as três etapas anteriores, excluindo os elementos em direção à extremidade esquerda (inferior) que foram substituídos.
  • A classificação termina quando o último elemento é alcançado.

Existem dois tipos principais de operação aqui, que são comparação e troca. Mudar de um elemento para o outro também é uma operação, mas leva relativamente pouco tempo em comparação com a operação de comparação ou a operação de troca no tipo de seleção.

Sobre2) Complexidade do tempo

Considere o seguinte código:

int resultado = 0;
para (int i = 0; i<8; i++)
for (int j = 0; j<8; j++)
resultado = resultado + 1;


printf ("%i \ n", resultado);

Há um loop externo e interno. Cada loop itera oito vezes. A operação de uma adição para ambos os loops é a operação principal e opera 64 vezes. 64 = 8 x 8 = 82. A saída é 64.

Este código é considerado como tendo 82 operações principais. Se 8 for substituído por n, então a complexidade do tempo seria dada como:

O (n2)

Isso usa a notação Big-O. A notação começa com O na mancha, seguida de parênteses. Dentro dos parênteses está o número de operações principais para o código.

Considere o seguinte código:

int resultado = 0;
para (int i = 0; i<8; i++)
para (int j = i; j<8; j++)
resultado = resultado + 1;


printf ("%i \ n", resultado);

O loop externo itera oito vezes. O loop interno itera até a oitava vez, mas começa a partir de i, que é o número de iteração do loop externo. A saída é 36. A operação de uma adição opera 36 vezes e não 64 vezes. Bem, isso ainda é considerado como complexidade do tempo O (n2). O funcionamento do tipo de seleção é semelhante a este código. Em outras palavras, o tipo de seleção é considerado como tendo complexidade do tempo O (n2).

Codificação em c

A classificação da seleção sempre dará a (n2) complexidade do tempo. Não importa como os elementos da matriz são dispostos. Isso ocorre porque todos os elementos são primeiro digitalizados; Então o restante dos elementos sem o primeiro será digitalizado a seguir; A varredura do restante dos elementos sem os dois primeiros seguem, e assim por diante. A digitalização deve ser concluída antes de trocar.

A lista a classificar é:

P o i u y t r e w q

O programa C classifica em ordem crescente. Essencialmente, o programa começa com:

#incluir
Void Selectiosort (char a [], int n)
para (int i = 0; iint minindx = i;
para (int j = i+1; jse (a [j] < A[minIndx])
minindx = j;

char temp = a [i]; A [i] = a [minindx]; A [minindx] = temp; // trocando

A biblioteca responsável pela entrada do teclado e saída para o monitor está incluída. Então, há a definição da função de classificação de seleção. Esta função como parâmetros tem a matriz (referência) com a lista e o número de elementos na matriz.

Existem dois loops; um está aninhado dentro do outro. O loop externo itera sobre todos os elementos que começam a partir do primeiro. Enquanto o loop fortal. A operação principal é a operação de comparação no loop for aninhado.

A troca é feita para cada iteração do loop externo logo após a conclusão do loop interno.

Uma função principal C adequada para o programa é:

int main (int argc, char ** argv)

int n = 10;
char a [] = 'p', 'o', 'i', 'u', 'y', 't', 'r', 'e', ​​'w', 'q';
selectiosort (a, n);
para (int i = 0; iprintf ("%c", a [i]);
printf ("\ n");
retornar 0;

A saída é:

E i o p q r t u w y

classificado.

Começa com a declaração do número de elementos na matriz. Depois, há a declaração de matriz. Existem dez elementos na matriz. Esses elementos são personagens. Então, a declaração de matriz começa com "char". Em seguida, a função de classificação de inserção é chamada. O primeiro argumento da chamada de função é o nome da matriz. O segundo argumento é o número de elementos na matriz.

Um loop for seguido. Isso para o loop imprime os personagens classificados. Ele usa a função printf () do stdio.biblioteca H. O primeiro argumento desta função é uma string. Esta string é uma string especial, mas ainda tem caracteres que seriam impressos. Ele também tem parâmetros para argumentos. Nesse caso, há apenas um parâmetro, %C. Há também apenas um argumento, um [i]. Depois que todos os caracteres foram impressos em uma linha, a função Print Printf () leva a saída para a próxima linha.

Conclusão

Este artigo discutiu as etapas para o tipo de seleção, que incluem assumir que o primeiro elemento é o menor elemento, comparando esse elemento com o restante dos elementos e conhecendo o verdadeiro elemento menor. Além disso, um usuário precisa trocar o menor elemento encontrado com o primeiro elemento e repetir as três etapas anteriores em ordem, excluindo o primeiro elemento substituído. As últimas etapas incluem continuar repetindo as três etapas acima, excluindo os elementos em direção à extremidade esquerda (inferior) que foram substituídos; A classificação termina quando o último elemento é alcançado. A complexidade do tempo para a classificação da seleção é O (n2).