Ir para conteúdo
  • Cadastre-se

[C] Exercicio: Escrever um vetor de inteiros e reescreve-lo em ordem crescente.


Posts Recomendados

Olá pessoal, ontem estava resolvendo um exercício sobre escrever um vetor e logo após reescreve-lo em ordem crescente. Bem simples né? Vou colocar o meu em spoiler, caso alguém queira resolver também antes de vê-lo, caso resolva e queira posta-lo, poste-o em spoiler também, obrigado :D

 

#include <stdio.h>
#define TAMANHO_VETOR 4 // Definindo uma constante para o tamanho do vetor.

int main(void){

	// Declarando as variaveis.
	int intVetor[TAMANHO_VETOR];
	int menor, pos, copy;	  

	// Gravando dados no vetor.
	for(int x = 0; x <= TAMANHO_VETOR; x++) {
		printf("Escreva o valor do vetor[%d]: ", x + 1); 
		scanf("%d", &intVetor[x]);
	}

	// 
	for(int x = 0; x <= TAMANHO_VETOR; x++) {
		menor = intVetor[x];
		pos = x;
		for(int y = x; y <= TAMANHO_VETOR; y++) {
			if (intVetor[y] < menor) {
				menor = intVetor[y];
				pos = y;     
			}
		}
		copy = intVetor[x];
		intVetor[x] = menor;
		intVetor[pos] = copy;
	} 

	system("PAUSE");
	return 0;
} 

Link para o post
Compartilhar em outros sites

#include <stdio.h>
void swap(int* vector, int from, int to) {
    int aux = vector[from];
    vector[from] = vector[to];
    vector[to] = aux;
}
void swift_down(int* vector, int start, int end) {
    int root = start;
    int child = root*2 + 1;
    while (child <= end) {
        if (child + 1 <= end && vector[child] < vector[child + 1]) {
            child++;
        }
        if (vector[root] < vector[child]) {
            swap(vector, root, child);
            root = child;
        } else {
            break;
        }
    }
}
void heapify(int* vector, int size) {
    int start = (size - 2)/2;
    int end = size - 1;
    while (start >= 0) {
        swift_down(vector, start, size - 1);
        start--;
    }
    while (end > 0) {
        swap(vector, end, 0);
        end--;
        swift_down(vector, 0, end);
    }
}
int main(int argc, char* argv[]) {
    int n, i;
    while (scanf("%d", &n) != EOF) {
        int vector[n];
        for (i = 0; i < n; i++) {
            scanf("%d", &vector[i]);
        }
        heapify(vector, n);
        for (i = 0; i < n; i++) {
            printf("%d ", vector[i]);
        }
        printf("\n");
    }
    return 0;
}

 

heap sort

Link para o post
Compartilhar em outros sites

O heapsort é relativamente simples se você entender o conceito. A parte difícil mesmo é entender o conceito pra falar a verdade, quando você entende ele o, código faz mais sentido.

 

É bem legal saber vários tipos de algoritimos de sorting, ajuda bastante na hora de diminuir o consumo do código. Se você quiser posso te enviar uns materiais legais sobre isso.

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo