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