Ir ao conteúdo
  • Cadastre-se
Poisoned00

C Qual o nome desse algoritmo?

Recommended Posts

Dale galera, a um tempinho eu conheci um algorítimo de ordenação, e recentemente estou aprofundando os estudos sobre algorítimos de ordenação.
Gostaria de descobrir o nome desse algorítimo... Eu pensava que era bubble sort , mas dai hoje descobri que na real o bubble é beeeem diferente..

Se alguém souber me diga pls.

#include <stdio.h>

int main(int argc, char const *argv[])
{
	int lista[10]={2,3,4,45,56,32,1,24,2,1};
	int aux;

	printf("antes:");
	for (int i = 0; i < 10; ++i)
	{
		printf("%d ",lista[i]);
	}
	printf("\nDepois:");

	for (int i = 0; i < 10; ++i)
	{
		for (int j = 0; j < 10; ++j)
		{
			if(lista[i]<lista[j]){
			
				aux = lista[i];
				lista[i]=lista[j];
				lista[j]=aux;
			
			}
		}
	}

	for (int i = 0; i < 10; ++i)
	{
		printf("%d ",lista[i]);
	}
	return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

É um algoritmo de ordenação por seleção (selection sort), mas está errado, pois no segundo ciclo for o j deve começar com valor i+1, não 0.

 

Fazendo essa correção o algoritmo seria uma selection sort válido, mas é instável, e faz muito mais trocas do que o necessário.

 

Uma versão melhor pode ser vista no próprio wikipedia:

void selection_sort(int num[], int tam) { 
  int i, j, min, aux;
  for (i = 0; i < (tam-1); i++) 
  {
     min = i;
     for (j = (i+1); j < tam; j++) {
       if(num[j] < num[min]) 
         min = j;
     }
     if (num[i] != num[min]) {
       aux = num[i];
       num[i] = num[min];
       num[min] = aux;
     }
  }
}

Nessa versão se a lista tiver 10 elementos, i vai de 0 a 8, economizando 1 ciclo pois não precisa checar o índice 9, j vai de i+1 até 9, e cada troca é feita apenas 1 vez por ciclo pois o que o algoritmo faz é buscar e selecionar o menor valor entre todos o números que ainda não foram ordenados da lista, e guarda o índice dele, e aí no fim faz a troca colocando o menor valor selecionado na i-ésima posição da lista.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×