fork(1) download
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. const int MAX_SIZE = 121;
  6.  
  7. struct Elev {
  8. double medie;
  9. char nume[21];
  10. };
  11.  
  12.  
  13. void sortare(int n, Elev elevi[30]) {
  14. // pun toate numele in functie de medie, incepand cu media cea mai mica
  15. // parcurg fiecare medie
  16. // pun cea mai mica medie pe prima pozitie, apoi numele de pe prima pozitie il voi interschimba cu
  17. // numele de pe pozitia respectiva
  18. int start_position = 0, final_position = 0, md = 0;
  19. for (int element = 0; element < n; ++element) {
  20. int min_position = element;
  21. Elev aux[21];
  22. // parcurg toate pozitiile
  23. for (int i = element; i < n; ++i) {
  24. if (elevi[min_position].medie > elevi[i].medie) {
  25. min_position = i;
  26. }
  27. }
  28. // cout << min_position;
  29. // if (min_position != element) {
  30. // schimb numele de pe pozitia cea mai mica cu numele de pe pozitia respectiva
  31. strcpy(aux[0].nume, elevi[element].nume);
  32. //cout <<"numele de pe pozitia actuala este : " << aux << "\n";
  33. strcpy(elevi[element].nume, elevi[min_position].nume);
  34. //cout << "numele de pe cea mai mica pozitie este : " << elevi[min_position].nume << "\n";
  35. strcpy(elevi[min_position].nume, aux[0].nume);
  36. // schimb media de pe pozitia cea mai mica cu media de pe pozitia respectiva
  37. aux[1].medie = elevi[element].medie;
  38. elevi[element].medie = elevi[min_position].medie;
  39. elevi[min_position].medie = aux[1].medie;
  40.  
  41. // pana aici am afisat in functie de medie, numele nu sunt neaparat in ordinea care trebuie
  42.  
  43. // acum schimb numele de pe fiecare portiune in functie de nume
  44.  
  45. if (element > 0) {
  46. if (md != elevi[element].medie) {
  47. final_position = element;
  48. // aranjez cuvintele de pe portiunea start_position-final_position
  49. for (int i = start_position; i < final_position; ++i) {
  50. int position_min = i;
  51. for (int j = i + 1; j < final_position; ++j) {
  52. // aflu cuvantul minim
  53. if (strcmp(elevi[position_min].nume, elevi[j].nume) > 0) {
  54. position_min = j;
  55. }
  56. }
  57. // schimb numele de pe positia minima cu numele de pe pozitia actuala positie si invers
  58. if (position_min != i) {
  59. char aux[21];
  60. strcpy(aux, elevi[i].nume);
  61. strcpy(elevi[i].nume, elevi[position_min].nume);
  62. strcpy(elevi[position_min].nume, aux);
  63. }
  64. }
  65. start_position = final_position;
  66. md = elevi[element].medie;
  67. }
  68. }
  69. }
  70. }
  71.  
  72.  
  73. int main() {
  74. int n;
  75. cin >> n;
  76. char aux[MAX_SIZE];
  77. Elev elevi[MAX_SIZE];
  78. for (int i = 0; i < n; ++i) {
  79. cin >> elevi[i].medie >> elevi[i].nume;
  80. }
  81. sortare(n, elevi);
  82.  
  83. for (int i = 0; i < n; ++i) {
  84. cout << elevi[i].medie << " " << elevi[i].nume << "\n";
  85. }
  86.  
  87.  
  88. return 0;
  89. }
Success #stdin #stdout 0.01s 5524KB
stdin
9
8.52 messi
6.34 paulescu
9.25 mbappe
8.52 dica
7.38 tamas
6.34 paul
9.25 neymar
9.25 messias
7.38 coman 
stdout
6.34 paulescu
6.34 paul
7.38 tamas
7.38 coman
8.52 messi
8.52 dica
9.25 neymar
9.25 messias
9.25 mbappe