fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. /* --- Hipotetycznie twoja biblioteka --- */
  6. void wypelnij_tablice(int* tab, int size) {
  7. for (int i = 0; i < size; ++i) {
  8. cin >> tab[i];
  9. }
  10. }
  11.  
  12. void wypisz_tablice(int* tab, int size) {
  13. for (int i = 0; i < size; ++i) {
  14. if (i > 0) {
  15. cout << ",";
  16. }
  17.  
  18. cout << tab[i];
  19. }
  20.  
  21. cout << endl;
  22. }
  23. /* --- Hipotetycznie twoja biblioteka --- */
  24.  
  25. void scal(int *tab,int *t,int pocz,int srodek,int konc)
  26. {
  27. int i=pocz,j=srodek+1,q=pocz; // Błąd #3: brak +1. i,j są początkami ciągów które określiłeś jako sortowanie(tab,t,pocz,srodek); oraz sortowanie(tab,t,srodek+1,konc); drugi ciąg wyraźnie zaczyna się na srodek+1
  28. for(;i<=srodek && j<=konc;) // Błąd #4, pochodna #1: nieostra nierówność. Operujemy na indeksach [0..n-1]
  29. {
  30. if(tab[i]<tab[j])t[q++]=tab[i++];
  31. else t[q++]=tab[j++];
  32. }
  33.  
  34.  
  35. // Błąd #5: zbędne if-y powodujące brain-overload. Też błąd na przedziale [0..n-1]
  36. while(i<=srodek)
  37. t[q++]=tab[i++];
  38.  
  39. while(j<=konc)
  40. t[q++]=tab[j++];
  41.  
  42. for(uint i=pocz;i<=konc;i++) // Błąd #6, pochodna #1: operujemy na przedziale [0..n-1]
  43. {
  44. tab[i]=t[i];
  45. }
  46. }
  47.  
  48. void sortowanie(int *tab,int *t,int pocz,int konc) // Błąd #2: słabo opisana zmienna mamy początek i koniec ciągu, który sortujemy, a nie rozmiar
  49. {
  50. int srodek;
  51. if(pocz<konc)
  52. {
  53. srodek=(konc+pocz)/2;
  54. sortowanie(tab,t,pocz,srodek);
  55. sortowanie(tab,t,srodek+1,konc);
  56. scal(tab,t,pocz,srodek,konc);
  57. }
  58. }
  59.  
  60. int main()
  61. {
  62. int n;
  63. cout<<"Podaj rozmiar tablicy: ";
  64. cin>>n;
  65. int tab[n];
  66. int t[n];
  67. wypelnij_tablice(tab,n);
  68. wypisz_tablice(tab,n);
  69. sortowanie(tab,t,0,n-1); // Błąd #1: sortujemy na przedzial [0..n-1] a nie [0..n]
  70. wypisz_tablice(tab,n);
  71. return 0;
  72. }
Success #stdin #stdout 0s 3472KB
stdin
12
12
10
43
23
-78
45
123
56
98
41
90
24
stdout
Podaj rozmiar tablicy: 12,10,43,23,-78,45,123,56,98,41,90,24
-78,10,12,23,24,41,43,45,56,90,98,123