fork download
  1. // Sortowanie przez scalanie
  2. //--------------------------------------------------------
  3. // (C)2012 mgr Jerzy Wałaszek
  4. // I Liceum Ogólnokształcące
  5. // im. K. Brodzińskiego
  6. // w Tarnowie
  7. //--------------------------------------------------------
  8.  
  9. #include <cmath>
  10. #include <iostream>
  11. #include <iomanip>
  12. #include <cstdlib>
  13. #include <time.h>
  14.  
  15. using namespace std;
  16.  
  17. const int N = 20; // Liczebność zbioru.
  18.  
  19. int d[N],p[N];
  20.  
  21. // Procedura sortująca
  22. //--------------------
  23.  
  24. void MergeSort(int i_p, int i_k)
  25. {
  26. int i_s,i1,i2,i;
  27.  
  28. i_s = (i_p + i_k + 1) / 2;
  29. if(i_s - i_p > 1) MergeSort(i_p, i_s - 1);
  30. if(i_k - i_s > 0) MergeSort(i_s, i_k);
  31. i1 = i_p; i2 = i_s;
  32. for(i = i_p; i <= i_k; i++)
  33. p[i] = ((i1 == i_s) || ((i2 <= i_k) && (d[i1] > d[i2]))) ? d[i2++] : d[i1++];
  34. for(i = i_p; i <= i_k; i++) d[i] = p[i];
  35. }
  36.  
  37. // Program główny
  38. //---------------
  39.  
  40. int main()
  41. {
  42. int i;
  43.  
  44. cout << " Sortowanie przez scalanie\n"
  45. "---------------------------\n"
  46. " (C)2005 Jerzy Walaszek\n\n"
  47. "Przed sortowaniem:\n\n";
  48.  
  49. // Najpierw wypełniamy tablicę d[] liczbami pseudolosowymi
  50. // a następnie wyświetlamy jej zawartość
  51.  
  52. srand((unsigned)time(NULL));
  53.  
  54. for(i = 0; i < N; i++) d[i] = rand() % 100;
  55. for(i = 0; i < N; i++) cout << setw(4) << d[i];
  56. cout << endl;
  57.  
  58. // Sortujemy
  59.  
  60. MergeSort(0,N-1);
  61.  
  62. // Wyświetlamy wynik sortowania
  63.  
  64. cout << "Po sortowaniu:\n\n";
  65. for(i = 0; i < N; i++) cout << setw(4) << d[i];
  66. cout << endl;
  67. return 0;
  68. }
Success #stdin #stdout 0s 4548KB
stdin
Standard input is empty
stdout
 Sortowanie przez scalanie
---------------------------
  (C)2005  Jerzy Walaszek

Przed sortowaniem:

  35  40   0  13  28  29  47   1  11  15  32  72  88   6  61  75  87   3  41  56
Po sortowaniu:

   0   1   3   6  11  13  15  28  29  32  35  40  41  47  56  61  72  75  87  88