Anilto

Ordenação de vetores

Oct 21st, 2020
1,138
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* Em C, ficaria mais fácil trabalhar com structs, mas dá para trabalhar com vetores também, mas é mais rudimentar.
  2. Cabe observar que não se copia vetores usando '=', é preciso uma função para isso ('strcpy')
  3. Também não dá para comparar com '<' ou '==' ou '>', é preciso usar uma função 'strcmp' para isso.
  4. O exemplo abaixo usa um BUBBLE SORT simples para ordenar.
  5. Os vetores de nome e matricula precisam ser mexidos simultaneamente, senão não ficam sincronizados.
  6. Estude a rotina abaixo, pode ser que ajude.*/
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11.  
  12. int main() {
  13.     // variaveis gerais
  14.     char nome[5][15];       // vetor de vetores para acomodar os nomes (cinco nomes)
  15.     int matr[5];            // vetor de inteiros para matricula
  16.     int op = 0;
  17.  
  18.     // Ler nomes e matriculas
  19.     for (int i=0; i<5; i++) {
  20.         printf("\n Digite o nome %d: ", i + 1);
  21.         scanf("%s", &nome[i]);
  22.         printf("\n Digite a matr %d: ", i + 1);
  23.         scanf("%d", &matr[i]);
  24.     }
  25.     // Mostrar dados lidos
  26.     printf("\n\n Dados lidos: \n");
  27.     for (int i=0; i<5; i++) {
  28.         printf("\n Nome %d: %s, matricula: %d", i + 1, nome[i], matr[i]);
  29.  
  30.     }
  31.     // Ordenação
  32.     // Escolhe a campo de ordenação
  33.     while (op != 1 && op != 2) {        // validação da entrada
  34.         printf("\n\n Ordenar por nome (digite 1) ou por matricula (digite 2): ");
  35.         scanf("%d",&op);
  36.     }
  37.  
  38.     // variaveis para o bubble sort
  39.     int k, j, auxi;
  40.     char auxc[15];
  41.     if (op == 1) { // ordena por nome
  42.         // bubble sort usando o nome como chave
  43.         for (k = 1; k < 5; k++) {
  44.             for (j = 0; j < 5 - k; j++) {
  45.                 if ( strcmp( nome[j], nome[j + 1]) > 0) { // esta linha que define a ordenação
  46.                     // ajusta nome
  47.                     strcpy( auxc, nome[j] );
  48.                     strcpy( nome[j], nome[j + 1] );
  49.                     strcpy( nome[j + 1], auxc );
  50.                 // ajusta matricula
  51.                     auxi = matr[j];
  52.                     matr[j] = matr[j+1];
  53.                     matr[j+1] = auxi;
  54.                 }
  55.             }
  56.         }
  57.     }
  58.     else {      // ordena por matricula
  59.         // Bubble sort usando a matricula como chave
  60.         for (k = 1; k < 5; k++) {
  61.             for (j = 0; j < 5 - k; j++) {
  62.                 if ( matr[j] > matr[j+1]) {     // define a ordenação
  63.                     // ajusta nomes
  64.                     strcpy( auxc, nome[j] );
  65.                     strcpy( nome[j], nome[j + 1] );
  66.                     strcpy( nome[j + 1], auxc );
  67.                     // ajusta matricula
  68.                     auxi = matr[j];
  69.                     matr[j] = matr[j+1];
  70.                     matr[j+1] = auxi;
  71.                 }
  72.             }
  73.         }
  74.     }
  75.  
  76.     // Mostrar dados ordenador
  77.     printf("\n\n Dados ordenados: \n");
  78.  
  79.     for (int i=0; i<5; i++) {
  80.         printf("\n Nome %d: %s, matricula: %d", i + 1, nome[i], matr[i]);
  81.  
  82.     }
  83. }
  84.  
  85.     for (int i=0; i<5; i++) {
  86.         printf("\n Nome %d: %s, matricula: %d", i + 1, nome[i], matr[i]);
  87.  
  88.     }
  89. }
RAW Paste Data