Na start niech będzie nawet to https://google.github.io/styleguide/cppguide.html10 -> przykładowy sposób tworzenia ładnego kodu. Takie wtrącenie, może nie do końca zgodne z Twoim pytaniem, ale pewnie się przyda.
Nic takiego nie napisałem, a że brzydki, to był żart, [uśmiech na końcu zdania nie był ironiczny] bo nie przychodziło mi inne wyjaśnienie - w kompilatorze c++ 4.3.2 bez zmian twój kod uzyskuje AC [akccepted], w wyższym, 6.3, już nie - sam to sprawdź.
Piękność-brzydota to pojęcie względne i rzecz gustu, a o gustach się nie dyskutuje i są to [raczej] drobiazgi
Po kolei:
- Tak, trochę przesadziłeś ze wskaźnikami, i używa się ich też do uproszczenia kodu, a nie zagmatwania.
- Umieszczanie nawiasu otwierającego:
do { // tak jak preferuję
main()
{ // nie preferuję i to u Ciebie pewna drobna niekonsekwencja w stosunku do do, przecież nie masz
do
{
To samo w stosunku do innych pętli, dla mnie zawsze for (){, while(){ itd - t = tab = new int [a]
- while (a--) cin >> *t++;
- dalej w [twoim] kodzie wskaźniki nie przynoszą korzyści [w uproszczeniu zapisu kodu] w stosunku do zwykłych indeksów, a nawet [moim zdaniem] bardziej go gmatwają/zaciemniają.
- zmienna pom w my_sort jest nie używana.
- Sortowanie bąbelkowe to jak sam piszesz: "sposób sortowania nie jest zbyt górnolotny,"
Chyba tylko tyle i się nie przejmuj, czym więcej będziesz pisał [i ewentualnie czytał], tym szybciej dojdziesz do ładnego kodu: https://helion.pl/ksiazki/piekny-kod-tajemnice-mistrzow-programowania-andy-oram-greg-wilson,szpppv.htm3, Czysty kod, czy wreście https://helion.pl/ksiazki/jezyk-ansi-c-programowanie-wydanie-ii-brian-w-kernighan-dennis-m-ritchie,jansic.htm2, tak dobry stary C
Stworzyłem coś takiego, na ideone wszystkie wyniki wydają się być poprawne, w codeblocks na prywatnym komputerze jednak dzieje się coś dziwnego, przy więcej niż dwóch elementach i liczbach większych od mniej więcej 100, zawsze jeden element tablicy jest zamieniany na wielokrotność 8 np. 8, 16, 32. Dzieje się to w fragmencie “//sortowanie tablicy”. Wypisanie zawartości przed tym fragmentem pokazuje dobre wartości, za nim już właśnie z tym błędem. Nie spotkałem się nigdy z takim czymś. Co może być przyczyną? Czy może to być przyczyną błędu jeśli ideone kompiluje kod poprawnie?
Przykład takiej zamiany:
P.S. Zamienienie funkcji swap na ręczną zamianę pozycji z trzecią zmienną daje ten sam efekt.
Według specyfikacji C++ nie powinieneś pisać
int liczba[N];
a
int *liczba = new int[N];
Ale twój błąd jest w pętli sortującej. Iterujesz do elementu N, ale odwołujesz się jeden element dalej:
for(int j=0;j<N;j++)
{
if(liczba[j]>liczba[j+1])
i zgarniasz jakiś przypadkowy blok pamięci do swojej tablicy. Zresztą widzę po Dlaczego tylko 3? Wiatraczki FANGEN że masz do tego szczęście
PS. Czemu nie pójdziesz o krok dalej i nie uzyjesz funkcji sort zamiast funkcji swap?
I czasami tam dalej jest wartość, która nie przeszkadza, a czasami przeszkadza, powoduje błąd.
W posortowanej tablicy, dużo łatwiej się szuka, niż w nie posortowanej, czyż nie?
PS
Czemu nie ma SIGSEG czy czegoś podobnego? Pewnie z powodu takiego [lekko błędnego] sposobu deklarowania wielkości tablicy [statyczno-pseudo-dynamicznej ]
https://ideone.com/cJk8dP12 Przyjrzał by się ktoś co nie tak ?
Hmm, zazwyczaj takie rzeczy powodują takie rzeczy jak sięganie za tablicę i do niezadeklarowanych zmiennych. Ale po szybkim przejrzeniu nie widzę czegoś takiego Twoim w kodzie. Najbardziej podejrzana byla:
swap(wyniki[h], wyniki[h + 1]);
Wtedy można sobie do tablicy wcisnąć jakieś pozostałości, które stały bezpośrenio za nią jeśli się nie uważa z indeksem tablicy. Niestety nie widzę gdzie mógłby leżeć problem.
ależ skąd - wcale się nie zawiesza, tylko cały czas pracuje i nie chce skończyć
gdybyś czytała inne wątki, to byś przeczytała, że pisanie własnej procedury sortującej to proszenie się o kłopoty (zaś próba napisania własnej quicksoert to podwójne proszenie się o kłopoty)
przecież można użyć qsort() lub sort()
dodatkowo powinnaś jeszcze co najmniej raz dokładnie przeczytać treść zadania
Witam,
Twój kod zawiera dwa błędy:
- (WAŻNY BŁĄD) Próba odczytu danych znajdujących się poza zaalkowanym obszarem:
for (int j = 0; wsk[0]==wsk[j] ; ++j) {
Rozważ przypadek testowy nr 3:
2
1 1
- (WYCIEK PAMIĘCI) Brak zwolnienia zaalokowanej tablicy na końcu pętli.
Generalnie na ideone.com3 brakuje możliwości odpalenia kodu z debugowymi opcjami kompilacji typu:
g++ -fsanitize=address -fno-omit-frame-pointer -g -ggdb -lasan program.cpp
Odpalenie programu skompilowanego w taki sposób od razu by pokazało te problemy.
Pzdr.