Ir ao conteúdo
  • Cadastre-se

C Bubble sort - porque não funciona se eu trocar i+1 por 2?


Posts recomendados

Quando se troca  i+1 por 2 na Ordenação bolha ele não funciona. Por que?

Código:

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int vetor[10], i, j, troca;
	 for(i= 1; i <= 10; i++)
	 {
	 	printf("Digite um numero : ");
	 	scanf("%d", &vetor[i]);
	 }
	 for(i = 1; i < 10; i++)
	 {
	 	for (j = i+1; j <= 10; j++) //for (j = 2; j <= 10; j++)
	 	{
	 		if (vetor[i] > vetor[j])
	 		{
	 			troca = vetor[i];
	 			vetor[i] = vetor[j];
	 			vetor[j] = troca;
			} 
		}
	 }
	 
	 for(i= 1; i <= 10; i++)
	 {
	 	printf("----->  %d", vetor[i]);
	 }
	 return(0);
}

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@Lucca Rodrigues Porque i+1 seria 2

adicionado 2 minutos depois
2 horas atrás, Lucca Rodrigues disse:

Depois passa a valer inicialmente 3, 4, etc.

for (j = i+1; j <= 10; j++) //----->  for (j = 2; j <= 10; j++) esse aqui também seria incrementado (Não entendi a diferença)

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

image.png.84787ea998118aca43e8e5706a30f2c7.png

 

2 minutos atrás, AnonymousLPH disse:

@Lucca Rodrigues Porque i+1 seria 2

 

Isso seria para o forum de algebra, mas i+1 seria 2 quando i fosse um. Como vê na linha de cima, esse loop é executado para os valores de i entre 1 e 10 e assim você tem sua resposta...

Eu postei tempos atrás um algoritmo animado desse bubble sort onde umas barrinhas coloridas vão mostrando esse loop, em duas versões. Pode procurar no meu perfil. Pode ser interessante de ver. E tem a fonte em C ou C++

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@AnonymousLPH De onde pegou esse programa?

Olhe aqui:

for(i = 1; i < 10; i++) // i vale inicialmente 1
{
	for (j = i+1; j <= 10; j++) // j vale inicialmente 1 + 1 = 2

Depois i passa a valer 2, porque lhe é somado 1 a cada passagem no primeiro laço, e j, 3, porque j = i + 1 = 2 + 1. E assim por diante.

12 minutos atrás, AnonymousLPH disse:

for (j = i+1; j <= 10; j++) //-----> for (j = 2; j <= 10; j++) esse aqui também seria incrementado (Não entendi a diferença)

Seria incrementado sim, mas a partir de 2. No caso de i + 1, o valor inicial de j é alterado porque o valor de i é alterado, ou seja, poderia iniciar em 2, 3, 4, etc. Isso não acontece quando o valor inicial de j é sempre 2.

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Uma boa forma de entender como o algorítimo funciona é que matematicamente falando é uma propriedade distributiva, o elemento que esta no v[1] vai ser comparado com o v[2], v[3], v[4] ate o final, a partir disso o elemento que esta no v[2] não precisa mais ser comparado com o elemento que esta em v[1] porque já foi previamente comparado precisando apenas ser comparado com vetor[3], vetor[4] e assim por diante.

Link para o comentário
Compartilhar em outros sites

Select sort é uma tipo de bubble que sobe até a posição mais significativa do vetor por etapa.

Cada etapa é um posição significativa e precisa de um valor [máximo ou mínimo] a depender da ordenação.

 

@Benjamin Breeg ilustrou as etapas.

 

21 horas atrás, AnonymousLPH disse:

Quando se troca  i+1 por 2 na Ordenação bolha ele não funciona. Por que?

 Porque pula 2 etapas [0, 1], assim quaisquer que forem seu valores são imerecidos, além disso quando i > j, inverte-se a ordenação porque i é pensado para ser menor que j.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...