fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct {
  6. char nome[51];
  7. char cor[16];
  8. char tam;
  9. } camisa;
  10.  
  11. void shellsort(camisa *v, int n) {
  12. int i, j, h;
  13. camisa aux;
  14. for (h = 1; h < n; h = 3 * h + 1); // Calcula o h inicial.
  15. while (h > 0) {
  16. h = (h - 1) / 3; // Atualiza o valor de h.
  17. for (i = h; i < n; i++) {
  18. aux = v[i];
  19. j = i;
  20. // Comparação com base nas regras de ordenação.
  21. while (j >= h &&
  22. (strcmp(v[j - h].cor, aux.cor) > 0 ||
  23. (strcmp(v[j - h].cor, aux.cor) == 0 && v[j - h].tam < aux.tam) ||
  24. (strcmp(v[j - h].cor, aux.cor) == 0 && v[j - h].tam == aux.tam && strcmp(v[j - h].nome, aux.nome) > 0))) {
  25. v[j] = v[j - h];
  26. j -= h;
  27. }
  28. v[j] = aux;
  29. }
  30. }
  31. }
  32.  
  33. int main() {
  34. int n, i, c = 0;
  35. while (1) {
  36. scanf("%d", &n);
  37. if (n == 0) break;
  38. if (c != 0) printf("\n");
  39.  
  40. camisa cam[n];
  41. for (i = 0; i < n; i++) {
  42. while (getchar() != '\n');
  43. scanf("%[^\n]", cam[i].nome);
  44. scanf("%s %c", cam[i].cor, &cam[i].tam);
  45. }
  46.  
  47. shellsort(cam, n);
  48.  
  49. for (i = 0; i < n; i++) {
  50. printf("%s %c %s\n", cam[i].cor, cam[i].tam, cam[i].nome);
  51. }
  52.  
  53. c++;
  54. }
  55. return 0;
  56. }
  57.  
Success #stdin #stdout 0.01s 5284KB
stdin
9
Maria Jose
branco P
Mangojata Mancuda
vermelho P
Cezar Torres Mo
branco P
Baka Lhau
vermelho P
JuJu Mentina
branco M
Amaro Dinha
vermelho P
Adabi Finho
branco G
Severina Rigudinha
branco G
Carlos Chade Losna
vermelho P
3
Maria Joao
branco P
Marcio Guess
vermelho P
Maria Jose
branco P
0
stdout
branco P Cezar Torres Mo
branco P Maria Jose
branco M JuJu Mentina
branco G Adabi Finho
branco G Severina Rigudinha
vermelho P Amaro Dinha
vermelho P Baka Lhau
vermelho P Carlos Chade Losna
vermelho P Mangojata Mancuda

branco P Maria Joao
branco P Maria Jose
vermelho P Marcio Guess