#include <iostream>
using namespace std;
/* --- Hipotetycznie twoja biblioteka --- */
void wypelnij_tablice( int * tab, int size) {
for ( int i = 0 ; i < size; ++ i) {
cin >> tab[ i] ;
}
}
void wypisz_tablice( int * tab, int size) {
for ( int i = 0 ; i < size; ++ i) {
if ( i > 0 ) {
cout << "," ;
}
cout << tab[ i] ;
}
cout << endl;
}
/* --- Hipotetycznie twoja biblioteka --- */
void scal( int * tab,int * t,int pocz,int srodek,int konc)
{
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
for ( ; i<= srodek && j<= konc; ) // Błąd #4, pochodna #1: nieostra nierówność. Operujemy na indeksach [0..n-1]
{
if ( tab[ i] < tab[ j] ) t[ q++ ] = tab[ i++ ] ;
else t[ q++ ] = tab[ j++ ] ;
}
// Błąd #5: zbędne if-y powodujące brain-overload. Też błąd na przedziale [0..n-1]
while ( i<= srodek)
t[ q++ ] = tab[ i++ ] ;
while ( j<= konc)
t[ q++ ] = tab[ j++ ] ;
for ( uint i= pocz; i<= konc; i++ ) // Błąd #6, pochodna #1: operujemy na przedziale [0..n-1]
{
tab[ i] = t[ i] ;
}
}
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
{
int srodek;
if ( pocz< konc)
{
srodek= ( konc+ pocz) / 2 ;
sortowanie( tab,t,pocz,srodek) ;
sortowanie( tab,t,srodek+ 1 ,konc) ;
scal( tab,t,pocz,srodek,konc) ;
}
}
int main( )
{
int n;
cout << "Podaj rozmiar tablicy: " ;
cin >> n;
int tab[ n] ;
int t[ n] ;
wypelnij_tablice( tab,n) ;
wypisz_tablice( tab,n) ;
sortowanie( tab,t,0 ,n- 1 ) ; // Błąd #1: sortujemy na przedzial [0..n-1] a nie [0..n]
wypisz_tablice( tab,n) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8qIC0tLSBIaXBvdGV0eWN6bmllIHR3b2phIGJpYmxpb3Rla2EgLS0tICovCnZvaWQgd3lwZWxuaWpfdGFibGljZShpbnQqIHRhYiwgaW50IHNpemUpIHsKCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CgkJY2luID4+IHRhYltpXTsKCX0JCn0KCnZvaWQgIHd5cGlzel90YWJsaWNlKGludCogdGFiLCBpbnQgc2l6ZSkgewoJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKCQlpZiAoaSA+IDApIHsKCQkJY291dCA8PCAiLCI7CgkJfQoKCQljb3V0IDw8IHRhYltpXTsKCX0KCgljb3V0IDw8IGVuZGw7Cn0KLyogLS0tIEhpcG90ZXR5Y3puaWUgdHdvamEgYmlibGlvdGVrYSAtLS0gKi8KCnZvaWQgc2NhbChpbnQgKnRhYixpbnQgKnQsaW50IHBvY3osaW50IHNyb2RlayxpbnQga29uYykKewogICAgaW50IGk9cG9jeixqPXNyb2RlaysxLHE9cG9jejsgLy8gQsWCxIVkICMzOiBicmFrICsxLiBpLGogc8SFIHBvY3rEhXRrYW1pIGNpxIVnw7N3IGt0w7NyZSBva3JlxZtsacWCZcWbIGpha28gc29ydG93YW5pZSh0YWIsdCxwb2N6LHNyb2Rlayk7IG9yYXogc29ydG93YW5pZSh0YWIsdCxzcm9kZWsrMSxrb25jKTsgZHJ1Z2kgY2nEhWcgd3lyYcW6bmllIHphY3p5bmEgc2nEmSBuYSBzcm9kZWsrMQogICAgZm9yKDtpPD1zcm9kZWsgJiYgajw9a29uYzspIC8vIELFgsSFZCAjNCwgcG9jaG9kbmEgIzE6IG5pZW9zdHJhIG5pZXLDs3dub8WbxIcuIE9wZXJ1amVteSBuYSBpbmRla3NhY2ggWzAuLm4tMV0KICAgIHsKICAgICAgICBpZih0YWJbaV08dGFiW2pdKXRbcSsrXT10YWJbaSsrXTsKICAgICAgICBlbHNlIHRbcSsrXT10YWJbaisrXTsKICAgIH0KCgoJLy8gQsWCxIVkICM1OiB6YsSZZG5lIGlmLXkgcG93b2R1asSFY2UgYnJhaW4tb3ZlcmxvYWQuIFRlxbwgYsWCxIVkIG5hIHByemVkemlhbGUgWzAuLm4tMV0KICAgIHdoaWxlKGk8PXNyb2RlaykKICAgICAgICB0W3ErK109dGFiW2krK107CgogICAgd2hpbGUoajw9a29uYykKICAgICAgICB0W3ErK109dGFiW2orK107CgogICAgZm9yKHVpbnQgaT1wb2N6O2k8PWtvbmM7aSsrKSAvLyBCxYLEhWQgIzYsIHBvY2hvZG5hICMxOiBvcGVydWplbXkgbmEgcHJ6ZWR6aWFsZSBbMC4ubi0xXQogICAgewogICAgICAgIHRhYltpXT10W2ldOwogICAgfQp9Cgp2b2lkIHNvcnRvd2FuaWUoaW50ICp0YWIsaW50ICp0LGludCBwb2N6LGludCBrb25jKSAvLyBCxYLEhWQgIzI6IHPFgmFibyBvcGlzYW5hIHptaWVubmEgbWFteSBwb2N6xIV0ZWsgaSBrb25pZWMgY2nEhWd1LCBrdMOzcnkgc29ydHVqZW15LCBhIG5pZSByb3ptaWFyCnsKICAgIGludCBzcm9kZWs7CiAgICBpZihwb2N6PGtvbmMpCiAgICB7CgkJc3JvZGVrPShrb25jK3BvY3opLzI7CiAgICAgICAgc29ydG93YW5pZSh0YWIsdCxwb2N6LHNyb2Rlayk7CiAgICAgICAgc29ydG93YW5pZSh0YWIsdCxzcm9kZWsrMSxrb25jKTsKICAgICAgICBzY2FsKHRhYix0LHBvY3osc3JvZGVrLGtvbmMpOwogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIGludCBuOwogICAgY291dDw8IlBvZGFqIHJvem1pYXIgdGFibGljeTogIjsKICAgIGNpbj4+bjsKICAgIGludCB0YWJbbl07CiAgICBpbnQgdFtuXTsKICAgIHd5cGVsbmlqX3RhYmxpY2UodGFiLG4pOwogICAgd3lwaXN6X3RhYmxpY2UodGFiLG4pOwogICAgc29ydG93YW5pZSh0YWIsdCwwLG4tMSk7IC8vIELFgsSFZCAjMTogc29ydHVqZW15IG5hIHByemVkemlhbCBbMC4ubi0xXSBhIG5pZSBbMC4ubl0KICAgIHd5cGlzel90YWJsaWNlKHRhYixuKTsKICAgIHJldHVybiAwOwp9
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