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:
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).