Ir ao conteúdo

C++ Imprimir os índices originais de cada elemento no vetor depois de ordenado


Ir à solução Resolvido por Carlos Zanon,

Posts recomendados

Postado

Como faço para imprimir os índices originais depois que o vetor estiver ordenado. Meu professor orientou a criar um vetor para guardar os índices, porém não sei como acessar o número do índice. Segue abaixo o código:

 

#include <stdio.h>

void ordenar_vetor(int [], int);

int main(void){
   
    int n;
    scanf("%d", &n);
    
    int A[n];
    int size = 0;
    int value = 0;
    //enquanto conseguir ler valores antes de chegar no fim do arquivo
    while(scanf("%d ", &value) > 0) {
    A[size++] = value;
    }
       
    /* ordena o vetor em ordem crescente */
    ordenar_vetor(A, n);
   
    /* mostra o vetor v ordenado */
    for(int i = 0; i < n; i++){
        printf("%d ", A[i]);
    }    
       
    printf("\n");
    return 0;
}

void ordenar_vetor(int v[], int tamanho)
{
     int i, j, temp;
     
     for(i = 0; i < tamanho - 1; i++){
             
         for(j = 0; j < tamanho - 1; j++){
             if(v[j] > v[j + 1]){
                 temp = v[j];
                 v[j] = v[j + 1];
                 v[j + 1] = temp;
             }
         }
     }
}


Exemplo de entrada:

5

4 5 3 7 1

Exemplo de Saída:

4 2 0 1 3

 

Postado
3 horas atrás, Larissapereir disse:

porém não sei como acessar o número do índice

 

O índice é... o índice. Apenas crie um vetor do tamanho do vetor original e numere a partir de 0. Esses são os índices.

 

E na sua função de comparação quando inverter no vetor inverta os índices no vetor de índices:

 

if(v[j] > v[j + 1])
{
     temp = v[j];
     v[j] = v[j + 1];
     v[j + 1] = temp;
}

 

Nada mais. Ao final estará tudo certo. Se acessar o vetor classificado pelos indices originais terá o vetor na ordem original

  • Curtir 2
  • Solução
Postado

Se você tem acesso a C++, recomendo você usar o map, ele já insere ordenado.
Você pode salvar as posições de número original nele e exibir depois... (só não pode inserir número duplicado [duas vezes o número 5, por ex])

 

    map<int, int> inum;

    // Seu código de leitura...

    inum[numero_lido] = i;

 

E depois exibir...

 

    cout << "* Exibindo números após ordenação: " << endl;
	int pos = 0;
    for (auto it = inum.begin(); it != inum.end(); it++) {
        cout << "Número: " << it->first << " - Inicial: " << it->second << " - Atual: " << pos++ << endl;
    }

 

O Resultado vai ser algo como:

Citação

* Exibindo números após ordenação: 
Número: 1 - Inicial: 4 - Atual: 0
Número: 3 - Inicial: 2 - Atual: 1
Número: 4 - Inicial: 0 - Atual: 2
Número: 5 - Inicial: 1 - Atual: 3
Número: 7 - Inicial: 3 - Atual: 4

 

  • Curtir 2

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...