fork download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. void scal(vector<int>& tab, int pocz, int kon) {
  6. cout << pocz << " " << kon << endl;
  7. int mid = (pocz + kon) / 2;
  8. vector<int> part1(mid - pocz + 1);
  9. vector<int> part2(kon - mid);
  10.  
  11. for (int i = pocz; i <= mid; i++)
  12. part1[i - pocz] = tab[i];
  13.  
  14. for (int i = mid + 1; i <= kon; i++) {
  15. part2[i - (mid + 1)] = tab[i];
  16. }
  17.  
  18. int i1 = 0;
  19. int i2 = 0;
  20.  
  21. while (i1 < part1.size() && i2 < part2.size()) {
  22. if (part1[i1] < part2[i2]) {
  23. tab[pocz + i1 + i2] = part1[i1];
  24. i1++;
  25. }
  26. else {
  27. tab[pocz + i1 + i2] = part2[i2];
  28. i2++;
  29. }
  30. }
  31.  
  32. while (i1 < part1.size()) {
  33. tab[pocz + i1 + i2] = part1[i1];
  34. i1++;
  35. }
  36.  
  37. while (i2 < part2.size()) {
  38. tab[pocz + i1 + i2] = part2[i2];
  39. i2++;
  40. }
  41. /* for(auto e : tab){
  42.   cout << e << " ";
  43.   }
  44.   cout << endl << endl;
  45. */
  46. }
  47.  
  48. void sortowaniePrzezScalanie(vector<int>& tab, int pocz, int kon) {
  49. // posortuj tablice w przedziale <pocz : kon>
  50.  
  51. // warunek brzegowy -> rozmiar 1
  52. if (pocz == kon) {
  53. return;
  54. }
  55.  
  56. int mid = (pocz + kon) / 2;
  57.  
  58. sortowaniePrzezScalanie(tab, pocz, mid);
  59. sortowaniePrzezScalanie(tab, mid + 1, kon);
  60.  
  61. scal(tab, pocz, kon);
  62. for(auto e : tab){
  63. cout << e << " ";
  64. }
  65. cout << endl << endl;
  66. }
  67.  
  68.  
  69. int main() {
  70. vector <int> tab{2,1,5,4,3};
  71. sortowaniePrzezScalanie(tab, 0, 4);
  72. for(auto elem : tab){
  73. // cout << elem << " ";
  74. }
  75.  
  76. return 0;
  77. }
Success #stdin #stdout 0.01s 5308KB
stdin
Standard input is empty
stdout
0 1
1 2 5 4 3 

0 2
1 2 5 4 3 

3 4
1 2 5 3 4 

0 4
1 2 3 4 5