Advertisement
Pafnytiu

сортировка 1-15 (3 сортировки)

May 10th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.25 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <iomanip>
  5.  
  6. using namespace std;
  7. ifstream in("input.txt");
  8. ofstream out("output.txt");
  9.  
  10. struct Gruppa
  11. {
  12. string surname, name, patronymic;
  13. int BD, m1, m2, m3, m4, m5;
  14. void Input();
  15. void Output();
  16. };
  17.  
  18. void Gruppa::Input()
  19. {
  20. in >> surname >> name >> patronymic >> BD >> m1 >> m2 >> m3 >> m4 >> m5;
  21. }
  22.  
  23. void Gruppa::Output()
  24. {
  25. out << setw(15) << surname << setw(15) << name << setw(15) << patronymic << setw(5) << BD << setw(3) << m1 << setw(3) << m2 << setw(3) << m3 << setw(3) << m4 << setw(3) << m5 << endl;
  26. }
  27.  
  28.  
  29. void SortIn(Gruppa *a, int n)
  30. {
  31. int i, j, l;
  32. for (i = 0; i < n - 1; i++)
  33. {
  34. l = i;
  35. for (j = i + 1; j < n; j++)
  36. if (a[j].surname < a[l].surname || (a[j].surname == a[l].surname && a[j].BD > a[l].BD))
  37. l = j;
  38. swap(a[i], a[l]);
  39. }
  40. }
  41.  
  42. void SortShell(Gruppa *a, int n)
  43. {
  44. Gruppa temp;
  45. int i, j, incr = n / 2;
  46. while (incr > 0)
  47. {
  48. for (i = incr; i < n; i++)
  49. {
  50. j = i - incr;
  51. while (j >= 0)
  52. if (a[j].surname > a[j + incr].surname || (a[j].surname == a[j + incr].surname && a[j].BD < a[j + incr].BD))
  53. {
  54. temp = a[j]; a[j] = a[j + incr]; a[j + incr] = temp; j = j - incr;
  55. }
  56. else j = -1;
  57. }
  58. incr = incr / 2;
  59. }
  60. }
  61. bool comp(Gruppa a, Gruppa b)
  62. {
  63. if (a.surname != b.surname)
  64. return a.surname<b.surname;
  65. if (a.surname == b.surname && a.BD < b.BD)
  66. return a.BD > b.BD;
  67. }
  68.  
  69. bool iscomp(Gruppa a, Gruppa b)
  70. {
  71. return (a.BD == b.BD && a.surname == b.surname);
  72. }
  73. template <typename X>
  74. void downHeap(X *a, int k, int n)
  75. {
  76. Gruppa ne = a[k];
  77. while (k <= n / 2)
  78. {
  79. int child = 2 * k;
  80. if (child<n && comp(a[child], a[child + 1]))
  81. child++;
  82. if (comp(a[child], ne) || iscomp(a[child], ne)) break;
  83. swap(a[child], a[k]);//a[k]=a[child];
  84. k = child;
  85. }
  86. //a[k]=ne;
  87. }
  88.  
  89.  
  90. template <typename X>
  91. void SortHeap(X *a, int n)
  92. {
  93. for (int i = n / 2 - 1; i >= 0; i--) downHeap(a, i, n - 1);
  94. for (int i = n - 1; i>0; i--)
  95. {
  96. swap(a[i], a[0]);
  97. downHeap(a, 0, i - 1);
  98. }
  99. }
  100. int main()
  101. {
  102. int i, n = 0;
  103. Gruppa *a = new Gruppa[100];
  104. while (in.peek() != EOF)
  105. {
  106. a[n].Input();
  107. n++;
  108. }
  109.  
  110. SortHeap(a, n);
  111. for (i = 0; i < n; i++)
  112. a[i].Output();
  113. in.close();
  114. out.close();
  115. return 0;
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement