Ordenação de vetor sem métodos já consolidados

Elabora nesse post um algoritmo para a leitura de 10 valores e depois mostrar esses valores em ordem crescente.

Na computação já existem diversos métodos de ordenação já consolidados e bastante utilizados, como os algoritmos de inserção, seleção, Bubble sort, entre outros. Veja mais clicando aqui. Meu objetivo é desenvolver uma solução que não utiliza esses algoritmos. Logicamente minha solução não será a mais adequada nesse sentido e ela tem apenas objetivos didáticos.

Minha primeira solução considera que os 10 valores fornecidos são todos diferentes uns dos outros, enquanto a segunda solução essa restrição não é necessária.

Solução 1 – primeira parte

O objetivo da primeira parte é apenas encontrar o menor valor do conjunto.

#include <stdio.h>

int main(void) {
	int vet[10], i, menor;
	
	for (i=0; i<10; i++) {
		scanf("%i", &vet[i]);
	}
	
	menor = vet[0];
	for (i=0; i<10; i++) {
		if (vet[i] < menor) {
			menor = vet[i];
		}
	}
	printf("%i ", menor);
	
	return 0;
}

Teste o código: http://ideone.com/hUtlZz

Solução 1 – segunda parte

A segunda parte irá mostrar todos os valores em ordem crescente.

#include <stdio.h>

int main(void) {
	int vet[10], i, j, menor, antigoMenor;
	
	for (i=0; i<10; i++) {
		scanf("%i", &vet[i]);
	}
	
	//encontra o menor
	menor = vet[0];
	for (i=0; i<10; i++) {
		if (vet[i] < menor) {
			menor = vet[i];
		}
	}
	printf("%i ", menor);

	//mostra em ordem os demais valores
	antigoMenor = menor;
	for (j=0; j < 9; j++) { //9 porque já foi mostrado o menor de todos antes
		for (i=0; i<10; i++) {
			if (vet[i] > antigoMenor) {
				menor = vet[i];
			}
		}
		
		for (i=0; i<10; i++) {
			if (vet[i] < menor && vet[i] > antigoMenor) {
				menor = vet[i];
			}
		}
		antigoMenor = menor;
		printf("%i ", menor);
	}
	
	return 0;
}

Teste o código: http://ideone.com/CkmfVQ

Solução 2 – em linguagem C/C++

#include <stdio.h>

int main(void) {
	int vet[10], i, j, menor, antigoMenor, cont=0, cont2;
	
	for (i=0; i<10; i++) {
		scanf("%i", &vet[i]);
	}
	
	//encontra o menor
	menor = vet[0];
	for (i=0; i<10; i++) {
		if (vet[i] < menor) {
			menor = vet[i];
		}
	}
	printf("%i ", menor);
	
	//verifica quantas vezes o menor valor aparece
	for (i=0; i<10; i++) {
		if (vet[i] == menor) {
			cont++;
		}
	}
	cont--; //o primeiro número já foi mostrado

	//mostra em ordem os demais valores
	antigoMenor = menor;
	for (j=0; j < 9; j++) {
		if (cont == 0) {
			for (i=0; i<10; i++) {
				if (vet[i] > antigoMenor) {
					menor = vet[i];
				} 
			}
			
			for (i=0; i<10; i++) {
				if (vet[i] < menor && vet[i] > antigoMenor) {
					menor = vet[i];
				}
			}

			//verifica quantas vezes o menor valor aparece
			//copiado do trecho anterior
			for (i=0; i<10; i++) {
				if (vet[i] == menor) {
					cont++;
				}
			}
			
			antigoMenor = menor;
		}
		cont--;
		printf("%i ", menor);
	}
	
	return 0;
}

Teste o código: http://ideone.com/Oyvce1

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.